diff --git a/.reuse/templates/fkYAML.commented.jinja2 b/.reuse/templates/fkYAML.commented.jinja2 deleted file mode 100644 index 282e4002..00000000 --- a/.reuse/templates/fkYAML.commented.jinja2 +++ /dev/null @@ -1,13 +0,0 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -{% for copyright_line in copyright_lines %} -/// {{ copyright_line }} -{% endfor %} -{% for expression in spdx_expressions %} -/// SPDX-License-Identifier: {{ expression }} -{% endfor %} -/// -/// @file diff --git a/.reuse/templates/fkYAML.jinja2 b/.reuse/templates/fkYAML.jinja2 new file mode 100644 index 00000000..1b222e37 --- /dev/null +++ b/.reuse/templates/fkYAML.jinja2 @@ -0,0 +1,11 @@ + _______ __ __ __ _____ __ __ __ +| __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +| __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +|__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML + +{% for copyright_line in copyright_lines %} +{{ copyright_line }} +{% endfor %} +{% for expression in spdx_expressions %} +SPDX-License-Identifier: {{ expression }} +{% endfor %} \ No newline at end of file diff --git a/.reuse/templates/fkYAML_support.jinja2 b/.reuse/templates/fkYAML_support.jinja2 index 752d95ec..a72410b9 100644 --- a/.reuse/templates/fkYAML_support.jinja2 +++ b/.reuse/templates/fkYAML_support.jinja2 @@ -1,6 +1,6 @@ _______ __ __ __ _____ __ __ __ | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -| __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +| __| _ < \_ _/| ___ | _ | |___ version 0.3.13 |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML {% for copyright_line in copyright_lines %} diff --git a/CHANGELOG.md b/CHANGELOG.md index 019850d4..7a63a235 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Changelog +## [v0.3.13](https://github.com/fktn-k/fkYAML/releases/tag/v0.3.13) (2024-10-14) + +[Full Changelog](https://github.com/fktn-k/fkYAML/compare/v0.3.12...v0.3.13) + +- Fix wrong parse result from single scalar document [\#411](https://github.com/fktn-k/fkYAML/pull/411) ([fktn-k](https://github.com/fktn-k)) +- Fix infinite loops after parsing final empty block scalar [\#410](https://github.com/fktn-k/fkYAML/pull/410) ([fktn-k](https://github.com/fktn-k)) +- Fix float scalar serialization when a float is actually an integer [\#407](https://github.com/fktn-k/fkYAML/pull/407) ([fktn-k](https://github.com/fktn-k)) +- Fix URI validation for tag shorthands [\#403](https://github.com/fktn-k/fkYAML/pull/403) ([fktn-k](https://github.com/fktn-k)) +- Updated natvis file [\#402](https://github.com/fktn-k/fkYAML/pull/402) ([fktn-k](https://github.com/fktn-k)) +- Fix compile warnings/errors when benchmarker app is compiled with msvc [\#401](https://github.com/fktn-k/fkYAML/pull/401) ([fktn-k](https://github.com/fktn-k)) +- Accept % as first scalar character [\#399](https://github.com/fktn-k/fkYAML/pull/399) ([fktn-k](https://github.com/fktn-k)) + +- Optimized scalar parsing [\#409](https://github.com/fktn-k/fkYAML/pull/409) ([fktn-k](https://github.com/fktn-k)) +- Fix some typos in strings and comments [\#408](https://github.com/fktn-k/fkYAML/pull/408) ([sndth](https://github.com/sndth)) +- Remove header lines for Doxygen [\#398](https://github.com/fktn-k/fkYAML/pull/398) ([fktn-k](https://github.com/fktn-k)) +- Refine benchmarking [\#397](https://github.com/fktn-k/fkYAML/pull/397) ([fktn-k](https://github.com/fktn-k)) + ## [v0.3.12](https://github.com/fktn-k/fkYAML/releases/tag/v0.3.12) (2024-09-21) [Full Changelog](https://github.com/fktn-k/fkYAML/compare/v0.3.11...v0.3.12) diff --git a/CMakeLists.txt b/CMakeLists.txt index f98ab363..d3147f74 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.8) project( fkYAML - VERSION 0.3.12 + VERSION 0.3.13 LANGUAGES CXX) ############################################################# diff --git a/Makefile b/Makefile index 185cf323..75b51224 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ TOOL_SRCS = $(shell find tool -type f -name '*.cpp' | sort) # target version definition TARGET_MAJOR_VERSION := 0 TARGET_MINOR_VERSION := 3 -TARGET_PATCH_VERSION := 12 +TARGET_PATCH_VERSION := 13 TARGET_VERSION_FULL := $(TARGET_MAJOR_VERSION).$(TARGET_MINOR_VERSION).$(TARGET_PATCH_VERSION) VERSION_MACRO_FILE := include/fkYAML/detail/macros/version_macros.hpp @@ -177,17 +177,19 @@ build-bm-debug: cmake -B build_bm_debug -S . -DCMAKE_BUILD_TYPE=Debug -DFK_YAML_RUN_BENCHMARK=ON cmake --build build_bm_debug --config Debug -bm-debug: build-bm-debug - cmake -B build_bm_debug -S . -DCMAKE_BUILD_TYPE=Debug -DFK_YAML_RUN_BENCHMARK=ON - cmake --build build_bm_debug --config Debug - ./build_bm_debug/tool/benchmark/benchmarker ./tool/benchmark/macos.yml +bm-debug: + BENCHMARK_OUT=./tool/benchmark/results/result_debug_ubuntu_yml.txt BENCHMARK_OUT_FORMAT=console ./build_bm_debug/tool/benchmark/benchmarker ./tool/benchmark/cases/ubuntu.yml + BENCHMARK_OUT=./tool/benchmark/results/result_debug_citm_catalog_json.txt BENCHMARK_OUT_FORMAT=console ./build_bm_debug/tool/benchmark/benchmarker ./tool/benchmark/cases/citm_catalog.json + BENCHMARK_OUT=./tool/benchmark/results/result_debug_citm_catalog_yml.txt BENCHMARK_OUT_FORMAT=console ./build_bm_debug/tool/benchmark/benchmarker ./tool/benchmark/cases/citm_catalog.yml build-bm-release: cmake -B build_bm_release -S . -DCMAKE_BUILD_TYPE=Release -DFK_YAML_RUN_BENCHMARK=ON cmake --build build_bm_release --config Release -bm-release: build-bm-release - ./build_bm_release/tool/benchmark/benchmarker ./tool/benchmark/macos.yml +bm-release: + BENCHMARK_OUT=./tool/benchmark/results/result_release_ubuntu_yml.txt BENCHMARK_OUT_FORMAT=console ./build_bm_release/tool/benchmark/benchmarker ./tool/benchmark/cases/ubuntu.yml + BENCHMARK_OUT=./tool/benchmark/results/result_release_citm_catalog_json.txt BENCHMARK_OUT_FORMAT=console ./build_bm_release/tool/benchmark/benchmarker ./tool/benchmark/cases/citm_catalog.json + BENCHMARK_OUT=./tool/benchmark/results/result_release_citm_catalog_yml.txt BENCHMARK_OUT_FORMAT=console ./build_bm_release/tool/benchmark/benchmarker ./tool/benchmark/cases/citm_catalog.yml ################### # Maintenance # diff --git a/README.md b/README.md index 4e8e3fa2..5ca47033 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,8 @@ You can add YAML support into your projects by just including header files where - [Community Support](#community-support) - [How to use fkYAML](#how-to-use-fkyaml) - [How to test fkYAML](#how-to-test-fkYAML) -- [Benchmarking](#benchmarking) - [Supported compilers](#supported-compilers) +- [Benchmarking](#benchmarking) - [License](#license) - [Used third-party tools](#used-third-party-tools) @@ -85,22 +85,6 @@ $ cmake --build build --config Debug $ ctest -C Debug --test-dir build --output-on-failure ``` -## Benchmarking - -Though experimental, benchmarking scores are now available with [the dedicated benchmarking tool](./tool/benchmark/README.md) for the parsing. -On an AMD Ryzen 7 5800H @3.20GHz with g++11.4.0 in Ubuntu22.04 (WSL2), fkYAML parses [the YAML source](https://github.com/fktn-k/fkYAML/blob/develop/tool/benchmark/macos.yml) at a competitive speed compared against other existing YAML libraries for C/C++: - -| Benchmark | Release (MB/s) | -| ---------------------------------- | -------------- | -| fkYAML | 41.051 | -| libfyaml | 31.110 | -| rapidyaml
(with mutable buff) | 147.221 | -| rapidyaml
(with immutable buff) | 144.904 | -| yaml-cpp | 7.397 | - -Although [rapidyaml](https://github.com/biojppm/rapidyaml) is in general 4x faster than fkYAML as it focuses on high performance, fkYAML is 30% faster than [libfyaml](https://github.com/pantoniou/libfyaml) and also 5.5x faster than [yaml-cpp](https://github.com/jbeder/yaml-cpp). -Note that, since fkYAML deserializes scalars into native booleans or integers during the parsing, the performance could be more faster in some real use cases. - ## Supported compilers Currently, the following compilers are known to work and used in GitHub Actions workflows: @@ -153,6 +137,47 @@ Currently, the following compilers are known to work and used in GitHub Actions Requests for new compiler supports are welcome. If you encounter a problem regarding compilers, please let us know by [creating an issue](https://github.com/fktn-k/fkYAML/issues/new?assignees=&labels=kind%3A+bug&projects=&template=bug-report.yml) or a PR with the information of your Operating System so that the same situation can be reproduced. +## Benchmarking + +Though efficiency is not everything, speed and memory consumption are very important characteristics for C++ developers. Regarding speed, benchmarking scores are now available with [the dedicated benchmarking tool](./tool/benchmark/README.md) for the parsing. +The following tables are created from the benchmarking results in the following environment: +* CPU: AMD Ryzen 7 5800H @3.20GHz +* OS: Ubuntu22.04 (WSL2) +* Compiler: g++11.4.0 + +### Parsing [ubuntu.yml](https://github.com/fktn-k/fkYAML/blob/develop/tool/benchmark/cases/ubuntu.yml) + +| Benchmark | processed bytes per second (Release) | +| ---------------------------------- | ------------------------------------ | +| fkYAML | 55.1393Mi/s | +| libfyaml | 34.7645Mi/s | +| rapidyaml
(with mutable buff) | 19.6806Gi/s | +| rapidyaml
(with immutable buff) | 140.24Mi/s | +| yaml-cpp | 8.75716Mi/s | + +### Parsing [citm_catalog.json](https://github.com/fktn-k/fkYAML/blob/develop/tool/benchmark/cases/citm_catalog.json) + +| Benchmark | processed bytes per second (Release) | +| ---------------------------------- | ------------------------------------ | +| fkYAML | 82.9931Mi/s | +| libfyaml | 52.4308Mi/s | +| rapidyaml
(with mutable buff) | 30.339Gi/s | +| rapidyaml
(with immutable buff) | 145.672Mi/s | +| yaml-cpp | 14.238Mi/s | + +### Parsing [citm_catalog.yml](https://github.com/fktn-k/fkYAML/blob/develop/tool/benchmark/cases/citm_catalog.yml) + +| Benchmark | processed bytes per second (Release) | +| ---------------------------------- | ------------------------------------ | +| fkYAML | 35.152Mi/s | +| libfyaml | 23.0845Mi/s | +| rapidyaml
(with mutable buff) | 31.117Gi/s | +| rapidyaml
(with immutable buff) | 66.3046Mi/s | +| yaml-cpp | 6.11709Mi/s | + +Although [rapidyaml](https://github.com/biojppm/rapidyaml) is about 2x faster with immutable buffer and far faster with mutable buff than fkYAML as it focuses on high performance, fkYAML is in general 50% faster than [libfyaml](https://github.com/pantoniou/libfyaml) and also about 6x faster than [yaml-cpp](https://github.com/jbeder/yaml-cpp). +Note that, since fkYAML deserializes scalars into native booleans or integers during the parsing, the performance could be more faster in some use cases since there is no need for string manipulations. + ## License This project is distributed under the [MIT License](https://opensource.org/license/mit/): diff --git a/REUSE.toml b/REUSE.toml index c8d72e59..d988fa29 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -6,7 +6,7 @@ SPDX-PackageDownloadLocation = "https://github.com/fktn-k/fkYAML" [[annotations]] path = "**" precedence = "aggregate" -SPDX-FileCopyrightText = "2023 Kensuke Fukutani " +SPDX-FileCopyrightText = "2023-2024 Kensuke Fukutani " SPDX-License-Identifier = "MIT" [[annotations]] diff --git a/docs/examples/ex_basic_node_add_anchor_name.cpp b/docs/examples/ex_basic_node_add_anchor_name.cpp index 1333fa80..07ec70da 100644 --- a/docs/examples/ex_basic_node_add_anchor_name.cpp +++ b/docs/examples/ex_basic_node_add_anchor_name.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_add_tag_name.cpp b/docs/examples/ex_basic_node_add_tag_name.cpp index 2ddfec7f..b2e79c3c 100644 --- a/docs/examples/ex_basic_node_add_tag_name.cpp +++ b/docs/examples/ex_basic_node_add_tag_name.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_alias_of.cpp b/docs/examples/ex_basic_node_alias_of.cpp index ae7ae033..7659f701 100644 --- a/docs/examples/ex_basic_node_alias_of.cpp +++ b/docs/examples/ex_basic_node_alias_of.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_at_basic_node.cpp b/docs/examples/ex_basic_node_at_basic_node.cpp index 18e34588..6ec9b6f0 100644 --- a/docs/examples/ex_basic_node_at_basic_node.cpp +++ b/docs/examples/ex_basic_node_at_basic_node.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_at_compatible_type.cpp b/docs/examples/ex_basic_node_at_compatible_type.cpp index 5646ba09..a059a85a 100644 --- a/docs/examples/ex_basic_node_at_compatible_type.cpp +++ b/docs/examples/ex_basic_node_at_compatible_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_begin.cpp b/docs/examples/ex_basic_node_begin.cpp index 77b25815..7f9f0b31 100644 --- a/docs/examples/ex_basic_node_begin.cpp +++ b/docs/examples/ex_basic_node_begin.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_boolean_type.cpp b/docs/examples/ex_basic_node_boolean_type.cpp index 7163baad..1dcfa0f3 100644 --- a/docs/examples/ex_basic_node_boolean_type.cpp +++ b/docs/examples/ex_basic_node_boolean_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_const_iterator.cpp b/docs/examples/ex_basic_node_const_iterator.cpp index a5915cfc..8440f4ce 100644 --- a/docs/examples/ex_basic_node_const_iterator.cpp +++ b/docs/examples/ex_basic_node_const_iterator.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_constructor_1.cpp b/docs/examples/ex_basic_node_constructor_1.cpp index 00811c2d..e0cbdbe1 100644 --- a/docs/examples/ex_basic_node_constructor_1.cpp +++ b/docs/examples/ex_basic_node_constructor_1.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_constructor_2.cpp b/docs/examples/ex_basic_node_constructor_2.cpp index 1f45fb53..0ba84c5c 100644 --- a/docs/examples/ex_basic_node_constructor_2.cpp +++ b/docs/examples/ex_basic_node_constructor_2.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_constructor_3.cpp b/docs/examples/ex_basic_node_constructor_3.cpp index 9c9d45ec..c67f2747 100644 --- a/docs/examples/ex_basic_node_constructor_3.cpp +++ b/docs/examples/ex_basic_node_constructor_3.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_constructor_4.cpp b/docs/examples/ex_basic_node_constructor_4.cpp index 614eb52b..57147d9a 100644 --- a/docs/examples/ex_basic_node_constructor_4.cpp +++ b/docs/examples/ex_basic_node_constructor_4.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_constructor_5.cpp b/docs/examples/ex_basic_node_constructor_5.cpp index 1eaef65c..d3ec490e 100644 --- a/docs/examples/ex_basic_node_constructor_5.cpp +++ b/docs/examples/ex_basic_node_constructor_5.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_constructor_6.cpp b/docs/examples/ex_basic_node_constructor_6.cpp index 648b375b..c6bb05c6 100644 --- a/docs/examples/ex_basic_node_constructor_6.cpp +++ b/docs/examples/ex_basic_node_constructor_6.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_constructor_7.cpp b/docs/examples/ex_basic_node_constructor_7.cpp index d32dd156..d05a47d8 100644 --- a/docs/examples/ex_basic_node_constructor_7.cpp +++ b/docs/examples/ex_basic_node_constructor_7.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_constructor_8.cpp b/docs/examples/ex_basic_node_constructor_8.cpp index 0f2fcfa6..289bc219 100644 --- a/docs/examples/ex_basic_node_constructor_8.cpp +++ b/docs/examples/ex_basic_node_constructor_8.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_contains.cpp b/docs/examples/ex_basic_node_contains.cpp index f563d2ef..eabe7c33 100644 --- a/docs/examples/ex_basic_node_contains.cpp +++ b/docs/examples/ex_basic_node_contains.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_copy_assignment_operator.cpp b/docs/examples/ex_basic_node_copy_assignment_operator.cpp index b1fe6b1d..df303e47 100644 --- a/docs/examples/ex_basic_node_copy_assignment_operator.cpp +++ b/docs/examples/ex_basic_node_copy_assignment_operator.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_deserialize_char_array.cpp b/docs/examples/ex_basic_node_deserialize_char_array.cpp index a4c51913..fb1a3744 100644 --- a/docs/examples/ex_basic_node_deserialize_char_array.cpp +++ b/docs/examples/ex_basic_node_deserialize_char_array.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_deserialize_docs_char_array.cpp b/docs/examples/ex_basic_node_deserialize_docs_char_array.cpp index bd2d608e..d2e4631a 100644 --- a/docs/examples/ex_basic_node_deserialize_docs_char_array.cpp +++ b/docs/examples/ex_basic_node_deserialize_docs_char_array.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_deserialize_docs_file_pointer.cpp b/docs/examples/ex_basic_node_deserialize_docs_file_pointer.cpp index afb70366..c7414423 100644 --- a/docs/examples/ex_basic_node_deserialize_docs_file_pointer.cpp +++ b/docs/examples/ex_basic_node_deserialize_docs_file_pointer.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_deserialize_docs_iterators.cpp b/docs/examples/ex_basic_node_deserialize_docs_iterators.cpp index 2bdb73bb..34ec6366 100644 --- a/docs/examples/ex_basic_node_deserialize_docs_iterators.cpp +++ b/docs/examples/ex_basic_node_deserialize_docs_iterators.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_deserialize_docs_string.cpp b/docs/examples/ex_basic_node_deserialize_docs_string.cpp index a8ad6fc1..67f6b400 100644 --- a/docs/examples/ex_basic_node_deserialize_docs_string.cpp +++ b/docs/examples/ex_basic_node_deserialize_docs_string.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_deserialize_file_pointer.cpp b/docs/examples/ex_basic_node_deserialize_file_pointer.cpp index a41d84d5..76145c43 100644 --- a/docs/examples/ex_basic_node_deserialize_file_pointer.cpp +++ b/docs/examples/ex_basic_node_deserialize_file_pointer.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_deserialize_iterators.cpp b/docs/examples/ex_basic_node_deserialize_iterators.cpp index 28f9b1ec..d48d4b5d 100644 --- a/docs/examples/ex_basic_node_deserialize_iterators.cpp +++ b/docs/examples/ex_basic_node_deserialize_iterators.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_deserialize_string.cpp b/docs/examples/ex_basic_node_deserialize_string.cpp index ea7d0537..65b5757b 100644 --- a/docs/examples/ex_basic_node_deserialize_string.cpp +++ b/docs/examples/ex_basic_node_deserialize_string.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_empty.cpp b/docs/examples/ex_basic_node_empty.cpp index 872d0704..5c71eae0 100644 --- a/docs/examples/ex_basic_node_empty.cpp +++ b/docs/examples/ex_basic_node_empty.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_end.cpp b/docs/examples/ex_basic_node_end.cpp index f71e1577..4c39ee19 100644 --- a/docs/examples/ex_basic_node_end.cpp +++ b/docs/examples/ex_basic_node_end.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_extraction_operator.cpp b/docs/examples/ex_basic_node_extraction_operator.cpp index 798bd549..90960e10 100644 --- a/docs/examples/ex_basic_node_extraction_operator.cpp +++ b/docs/examples/ex_basic_node_extraction_operator.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_float_number_type.cpp b/docs/examples/ex_basic_node_float_number_type.cpp index 5ceff085..7cd97580 100644 --- a/docs/examples/ex_basic_node_float_number_type.cpp +++ b/docs/examples/ex_basic_node_float_number_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_get_anchor_name.cpp b/docs/examples/ex_basic_node_get_anchor_name.cpp index 60f83c83..754c030f 100644 --- a/docs/examples/ex_basic_node_get_anchor_name.cpp +++ b/docs/examples/ex_basic_node_get_anchor_name.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_get_tag_name.cpp b/docs/examples/ex_basic_node_get_tag_name.cpp index c97af9d0..9bdd8f65 100644 --- a/docs/examples/ex_basic_node_get_tag_name.cpp +++ b/docs/examples/ex_basic_node_get_tag_name.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_get_type.cpp b/docs/examples/ex_basic_node_get_type.cpp index eaaa3b91..0d3fefb1 100644 --- a/docs/examples/ex_basic_node_get_type.cpp +++ b/docs/examples/ex_basic_node_get_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_get_value.cpp b/docs/examples/ex_basic_node_get_value.cpp index fcfec222..418d3fae 100644 --- a/docs/examples/ex_basic_node_get_value.cpp +++ b/docs/examples/ex_basic_node_get_value.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_get_value_ref.cpp b/docs/examples/ex_basic_node_get_value_ref.cpp index 156409e1..f010e9c3 100644 --- a/docs/examples/ex_basic_node_get_value_ref.cpp +++ b/docs/examples/ex_basic_node_get_value_ref.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_get_yaml_version.cpp b/docs/examples/ex_basic_node_get_yaml_version.cpp index f3ab133a..d682602d 100644 --- a/docs/examples/ex_basic_node_get_yaml_version.cpp +++ b/docs/examples/ex_basic_node_get_yaml_version.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_get_yaml_version_type.cpp b/docs/examples/ex_basic_node_get_yaml_version_type.cpp index 4b04c095..dfa4a082 100644 --- a/docs/examples/ex_basic_node_get_yaml_version_type.cpp +++ b/docs/examples/ex_basic_node_get_yaml_version_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_has_anchor_name.cpp b/docs/examples/ex_basic_node_has_anchor_name.cpp index 7ec66e0a..d0191859 100644 --- a/docs/examples/ex_basic_node_has_anchor_name.cpp +++ b/docs/examples/ex_basic_node_has_anchor_name.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_has_tag_name.cpp b/docs/examples/ex_basic_node_has_tag_name.cpp index 18cc5185..78fbcb13 100644 --- a/docs/examples/ex_basic_node_has_tag_name.cpp +++ b/docs/examples/ex_basic_node_has_tag_name.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_insertion_operator.cpp b/docs/examples/ex_basic_node_insertion_operator.cpp index 334c57d2..34186f92 100644 --- a/docs/examples/ex_basic_node_insertion_operator.cpp +++ b/docs/examples/ex_basic_node_insertion_operator.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_integer_type.cpp b/docs/examples/ex_basic_node_integer_type.cpp index 72416f3d..7fa003f3 100644 --- a/docs/examples/ex_basic_node_integer_type.cpp +++ b/docs/examples/ex_basic_node_integer_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_is_alias.cpp b/docs/examples/ex_basic_node_is_alias.cpp index 3ef18d67..d456b37f 100644 --- a/docs/examples/ex_basic_node_is_alias.cpp +++ b/docs/examples/ex_basic_node_is_alias.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_is_anchor.cpp b/docs/examples/ex_basic_node_is_anchor.cpp index fd281ad1..2316f4e3 100644 --- a/docs/examples/ex_basic_node_is_anchor.cpp +++ b/docs/examples/ex_basic_node_is_anchor.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_is_boolean.cpp b/docs/examples/ex_basic_node_is_boolean.cpp index 7c35939c..9d143d93 100644 --- a/docs/examples/ex_basic_node_is_boolean.cpp +++ b/docs/examples/ex_basic_node_is_boolean.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_is_float_number.cpp b/docs/examples/ex_basic_node_is_float_number.cpp index 22d05204..1faea26e 100644 --- a/docs/examples/ex_basic_node_is_float_number.cpp +++ b/docs/examples/ex_basic_node_is_float_number.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_is_integer.cpp b/docs/examples/ex_basic_node_is_integer.cpp index 70ad97c3..d3a9df0a 100644 --- a/docs/examples/ex_basic_node_is_integer.cpp +++ b/docs/examples/ex_basic_node_is_integer.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_is_mapping.cpp b/docs/examples/ex_basic_node_is_mapping.cpp index 9d8e5346..f7839192 100644 --- a/docs/examples/ex_basic_node_is_mapping.cpp +++ b/docs/examples/ex_basic_node_is_mapping.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_is_null.cpp b/docs/examples/ex_basic_node_is_null.cpp index f53de4e3..96d14139 100644 --- a/docs/examples/ex_basic_node_is_null.cpp +++ b/docs/examples/ex_basic_node_is_null.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_is_scalar.cpp b/docs/examples/ex_basic_node_is_scalar.cpp index 1cf878db..e8ef1597 100644 --- a/docs/examples/ex_basic_node_is_scalar.cpp +++ b/docs/examples/ex_basic_node_is_scalar.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_is_sequence.cpp b/docs/examples/ex_basic_node_is_sequence.cpp index a9fbfa6b..4cb20ae9 100644 --- a/docs/examples/ex_basic_node_is_sequence.cpp +++ b/docs/examples/ex_basic_node_is_sequence.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_is_string.cpp b/docs/examples/ex_basic_node_is_string.cpp index b9727d4c..8f6eff21 100644 --- a/docs/examples/ex_basic_node_is_string.cpp +++ b/docs/examples/ex_basic_node_is_string.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_iterator.cpp b/docs/examples/ex_basic_node_iterator.cpp index 731f3f4d..f52cad6b 100644 --- a/docs/examples/ex_basic_node_iterator.cpp +++ b/docs/examples/ex_basic_node_iterator.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_mapping.cpp b/docs/examples/ex_basic_node_mapping.cpp index 65a9ca51..76a290da 100644 --- a/docs/examples/ex_basic_node_mapping.cpp +++ b/docs/examples/ex_basic_node_mapping.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_mapping_type.cpp b/docs/examples/ex_basic_node_mapping_type.cpp index fc9dac88..3fef6e40 100644 --- a/docs/examples/ex_basic_node_mapping_type.cpp +++ b/docs/examples/ex_basic_node_mapping_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_node.cpp b/docs/examples/ex_basic_node_node.cpp index 56d60887..b65e2cfa 100644 --- a/docs/examples/ex_basic_node_node.cpp +++ b/docs/examples/ex_basic_node_node.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_node_t.cpp b/docs/examples/ex_basic_node_node_t.cpp index 023a59ec..59f0f422 100644 --- a/docs/examples/ex_basic_node_node_t.cpp +++ b/docs/examples/ex_basic_node_node_t.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_operator_eq.cpp b/docs/examples/ex_basic_node_operator_eq.cpp index 4a580fce..fd1103d6 100644 --- a/docs/examples/ex_basic_node_operator_eq.cpp +++ b/docs/examples/ex_basic_node_operator_eq.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_operator_ge.cpp b/docs/examples/ex_basic_node_operator_ge.cpp index a4f6ce4a..ecc8cf7e 100644 --- a/docs/examples/ex_basic_node_operator_ge.cpp +++ b/docs/examples/ex_basic_node_operator_ge.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_operator_gt.cpp b/docs/examples/ex_basic_node_operator_gt.cpp index 8d264e5d..0daeef46 100644 --- a/docs/examples/ex_basic_node_operator_gt.cpp +++ b/docs/examples/ex_basic_node_operator_gt.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_operator_le.cpp b/docs/examples/ex_basic_node_operator_le.cpp index c21080a1..ba9822eb 100644 --- a/docs/examples/ex_basic_node_operator_le.cpp +++ b/docs/examples/ex_basic_node_operator_le.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_operator_lt.cpp b/docs/examples/ex_basic_node_operator_lt.cpp index 4dcb90ff..a061cdc9 100644 --- a/docs/examples/ex_basic_node_operator_lt.cpp +++ b/docs/examples/ex_basic_node_operator_lt.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_operator_ne.cpp b/docs/examples/ex_basic_node_operator_ne.cpp index feb70c83..2850319b 100644 --- a/docs/examples/ex_basic_node_operator_ne.cpp +++ b/docs/examples/ex_basic_node_operator_ne.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_sequence.cpp b/docs/examples/ex_basic_node_sequence.cpp index 097b263b..23d3eb54 100644 --- a/docs/examples/ex_basic_node_sequence.cpp +++ b/docs/examples/ex_basic_node_sequence.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_sequence_type.cpp b/docs/examples/ex_basic_node_sequence_type.cpp index 3f7b4407..71f6e7a6 100644 --- a/docs/examples/ex_basic_node_sequence_type.cpp +++ b/docs/examples/ex_basic_node_sequence_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_serialize.cpp b/docs/examples/ex_basic_node_serialize.cpp index 4f05b52c..0f3da2e3 100644 --- a/docs/examples/ex_basic_node_serialize.cpp +++ b/docs/examples/ex_basic_node_serialize.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_serialize_docs.cpp b/docs/examples/ex_basic_node_serialize_docs.cpp index 59a0ed31..cbf23a7c 100644 --- a/docs/examples/ex_basic_node_serialize_docs.cpp +++ b/docs/examples/ex_basic_node_serialize_docs.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_set_yaml_version.cpp b/docs/examples/ex_basic_node_set_yaml_version.cpp index 3e8b8373..719aed9c 100644 --- a/docs/examples/ex_basic_node_set_yaml_version.cpp +++ b/docs/examples/ex_basic_node_set_yaml_version.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_set_yaml_version_type.cpp b/docs/examples/ex_basic_node_set_yaml_version_type.cpp index 5b46ad19..99d3ee95 100644 --- a/docs/examples/ex_basic_node_set_yaml_version_type.cpp +++ b/docs/examples/ex_basic_node_set_yaml_version_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_size.cpp b/docs/examples/ex_basic_node_size.cpp index 1e036749..62d6dbb7 100644 --- a/docs/examples/ex_basic_node_size.cpp +++ b/docs/examples/ex_basic_node_size.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_string_type.cpp b/docs/examples/ex_basic_node_string_type.cpp index 52e52d53..412d7113 100644 --- a/docs/examples/ex_basic_node_string_type.cpp +++ b/docs/examples/ex_basic_node_string_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_subscript_operator_basic_node.cpp b/docs/examples/ex_basic_node_subscript_operator_basic_node.cpp index 981ad043..d4036c0e 100644 --- a/docs/examples/ex_basic_node_subscript_operator_basic_node.cpp +++ b/docs/examples/ex_basic_node_subscript_operator_basic_node.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_subscript_operator_compatible_type.cpp b/docs/examples/ex_basic_node_subscript_operator_compatible_type.cpp index 59364cda..dce34be8 100644 --- a/docs/examples/ex_basic_node_subscript_operator_compatible_type.cpp +++ b/docs/examples/ex_basic_node_subscript_operator_compatible_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_swap_member.cpp b/docs/examples/ex_basic_node_swap_member.cpp index 0b12f3bf..c81dd5aa 100644 --- a/docs/examples/ex_basic_node_swap_member.cpp +++ b/docs/examples/ex_basic_node_swap_member.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_swap_std.cpp b/docs/examples/ex_basic_node_swap_std.cpp index 4109bd4f..96732b7f 100644 --- a/docs/examples/ex_basic_node_swap_std.cpp +++ b/docs/examples/ex_basic_node_swap_std.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_type.cpp b/docs/examples/ex_basic_node_type.cpp index 023a59ec..59f0f422 100644 --- a/docs/examples/ex_basic_node_type.cpp +++ b/docs/examples/ex_basic_node_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_value_converter_type.cpp b/docs/examples/ex_basic_node_value_converter_type.cpp index d6ec0511..aa889e50 100644 --- a/docs/examples/ex_basic_node_value_converter_type.cpp +++ b/docs/examples/ex_basic_node_value_converter_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_basic_node_yaml_version_t.cpp b/docs/examples/ex_basic_node_yaml_version_t.cpp index b3ce83a6..cee6f828 100644 --- a/docs/examples/ex_basic_node_yaml_version_t.cpp +++ b/docs/examples/ex_basic_node_yaml_version_t.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_exception_constructor_msg.cpp b/docs/examples/ex_exception_constructor_msg.cpp index 08aa0fb4..7274048e 100644 --- a/docs/examples/ex_exception_constructor_msg.cpp +++ b/docs/examples/ex_exception_constructor_msg.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_exception_constructor_noarg.cpp b/docs/examples/ex_exception_constructor_noarg.cpp index 8cf32478..b8f4ae04 100644 --- a/docs/examples/ex_exception_constructor_noarg.cpp +++ b/docs/examples/ex_exception_constructor_noarg.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_exception_what.cpp b/docs/examples/ex_exception_what.cpp index 3f8ee5f1..77a2dab7 100644 --- a/docs/examples/ex_exception_what.cpp +++ b/docs/examples/ex_exception_what.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_macros_versions.cpp b/docs/examples/ex_macros_versions.cpp index 2012a76c..2f2adaca 100644 --- a/docs/examples/ex_macros_versions.cpp +++ b/docs/examples/ex_macros_versions.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_node_type.cpp b/docs/examples/ex_node_type.cpp index 8373f9c5..044fac8c 100644 --- a/docs/examples/ex_node_type.cpp +++ b/docs/examples/ex_node_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_node_value_converter_from_node.cpp b/docs/examples/ex_node_value_converter_from_node.cpp index 8a647920..ff5c8cc8 100644 --- a/docs/examples/ex_node_value_converter_from_node.cpp +++ b/docs/examples/ex_node_value_converter_from_node.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_node_value_converter_to_node.cpp b/docs/examples/ex_node_value_converter_to_node.cpp index b5875c6a..9cac304e 100644 --- a/docs/examples/ex_node_value_converter_to_node.cpp +++ b/docs/examples/ex_node_value_converter_to_node.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_operator_literal_yaml.cpp b/docs/examples/ex_operator_literal_yaml.cpp index adf62d2b..258b694c 100644 --- a/docs/examples/ex_operator_literal_yaml.cpp +++ b/docs/examples/ex_operator_literal_yaml.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_ordered_map_at.cpp b/docs/examples/ex_ordered_map_at.cpp index c667ffef..85427cb2 100644 --- a/docs/examples/ex_ordered_map_at.cpp +++ b/docs/examples/ex_ordered_map_at.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_ordered_map_constructor_initializer_list.cpp b/docs/examples/ex_ordered_map_constructor_initializer_list.cpp index ebbf9f10..0ff9167f 100644 --- a/docs/examples/ex_ordered_map_constructor_initializer_list.cpp +++ b/docs/examples/ex_ordered_map_constructor_initializer_list.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_ordered_map_constructor_noarg.cpp b/docs/examples/ex_ordered_map_constructor_noarg.cpp index ece30874..7faad6ac 100644 --- a/docs/examples/ex_ordered_map_constructor_noarg.cpp +++ b/docs/examples/ex_ordered_map_constructor_noarg.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_ordered_map_emplace.cpp b/docs/examples/ex_ordered_map_emplace.cpp index b1aa7824..a1c33b27 100644 --- a/docs/examples/ex_ordered_map_emplace.cpp +++ b/docs/examples/ex_ordered_map_emplace.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_ordered_map_find.cpp b/docs/examples/ex_ordered_map_find.cpp index 29686f22..e802bf62 100644 --- a/docs/examples/ex_ordered_map_find.cpp +++ b/docs/examples/ex_ordered_map_find.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_ordered_map_subscript_operator.cpp b/docs/examples/ex_ordered_map_subscript_operator.cpp index 2edf8d6f..14a86c03 100644 --- a/docs/examples/ex_ordered_map_subscript_operator.cpp +++ b/docs/examples/ex_ordered_map_subscript_operator.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/ex_yaml_version_type.cpp b/docs/examples/ex_yaml_version_type.cpp index 935eb444..17f4c355 100644 --- a/docs/examples/ex_yaml_version_type.cpp +++ b/docs/examples/ex_yaml_version_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/tutorial_1.cpp b/docs/examples/tutorial_1.cpp index 5fd40a5e..e94df280 100644 --- a/docs/examples/tutorial_1.cpp +++ b/docs/examples/tutorial_1.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/tutorial_2.cpp b/docs/examples/tutorial_2.cpp index 0dea7d26..fe579ff0 100644 --- a/docs/examples/tutorial_2.cpp +++ b/docs/examples/tutorial_2.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/tutorial_3.cpp b/docs/examples/tutorial_3.cpp index 22595568..6e84daea 100644 --- a/docs/examples/tutorial_3.cpp +++ b/docs/examples/tutorial_3.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/examples/tutorial_4.cpp b/docs/examples/tutorial_4.cpp index 313869de..75105d69 100644 --- a/docs/examples/tutorial_4.cpp +++ b/docs/examples/tutorial_4.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/docs/mkdocs/docs/home/releases.md b/docs/mkdocs/docs/home/releases.md index 91f9832f..81dbd3ef 100644 --- a/docs/mkdocs/docs/home/releases.md +++ b/docs/mkdocs/docs/home/releases.md @@ -1,6 +1,49 @@ # Releases -## [v0.3.12](https://github.com/fktn-k/fkYAML/releases/tag/v0.3.12) (2024-09-21) +## **fkYAML version 0.3.13** + +!!! abstract "Release Packages" + + * [fkYAML.zip](https://github.com/fktn-k/fkYAML/releases/download/v0.3.13/fkYAML.zip) + * [fkYAML.tgz](https://github.com/fktn-k/fkYAML/releases/download/v0.3.13/fkYAML.tgz) + * [fkYAML_single_header.zip](https://github.com/fktn-k/fkYAML/releases/download/v0.3.13/fkYAML_single_header.zip) + * [fkYAML_single_header.tgz](https://github.com/fktn-k/fkYAML/releases/download/v0.3.13/fkYAML_single_header.tgz) + * [node.hpp](https://github.com/fktn-k/fkYAML/releases/download/v0.3.13/node.hpp) (single header) + +### Summary + +This release includes performance improvements in parsing YAML documents and many bug fixes in both serialization and deserialization functions. +In addition, benchmarking has been improved to facilitate comparison with existing YAML libraries by adding variations in data file content. +No changes are required for migration. + +### What's Changed + +#### :zap: Improvements +- Refine benchmarking ([\#397](https://github.com/fktn-k/fkYAML/pull/397), [fktn-k](https://github.com/fktn-k)) + - replaced data files for benchmarking for better comparison against existing YAML libraries +- Optimized scalar parsing ([\#409](https://github.com/fktn-k/fkYAML/pull/409), [fktn-k](https://github.com/fktn-k)) + - increased parse speed by about 5MiB/s + +#### :bug: Bug Fixes +- Accept % as first scalar character ([\#399](https://github.com/fktn-k/fkYAML/pull/399), [fktn-k](https://github.com/fktn-k)) +- Fix compile warnings/errors when benchmarker app is compiled with msvc ([\#401](https://github.com/fktn-k/fkYAML/pull/401), [fktn-k](https://github.com/fktn-k)) +- Updated natvis file ([\#402](https://github.com/fktn-k/fkYAML/pull/402), [fktn-k](https://github.com/fktn-k)) + - fixed broken natvis file contents +- Fix URI validation for tag shorthands ([\#403](https://github.com/fktn-k/fkYAML/pull/403), [fktn-k](https://github.com/fktn-k)) +- Fix float scalar serialization when a float is actually an integer ([\#407](https://github.com/fktn-k/fkYAML/pull/407), [fktn-k](https://github.com/fktn-k)) + - reported by [ARessegetesStery](https://github.com/ARessegetesStery) in the issue [\#405](https://github.com/fktn-k/fkYAML/issues/405) +- Fix infinite loops after parsing final empty block scalar ([\#410](https://github.com/fktn-k/fkYAML/pull/410), [fktn-k](https://github.com/fktn-k)) +- Fix wrong parse result from single scalar document ([\#411](https://github.com/fktn-k/fkYAML/pull/411), [fktn-k](https://github.com/fktn-k)) + +#### :memo: Documentation +- Remove header lines for Doxygen ([\#398](https://github.com/fktn-k/fkYAML/pull/398), [fktn-k](https://github.com/fktn-k)) +- Fix some typos in strings and comments ([\#408](https://github.com/fktn-k/fkYAML/pull/408), [sndth](https://github.com/sndth)) + +**Full Changelog**: https://github.com/fktn-k/fkYAML/compare/v0.3.12...v0.3.13 + +--- + +## **fkYAML version 0.3.12** !!! abstract "Release Packages" diff --git a/docs/mkdocs/docs/tutorials/cmake_integration.md b/docs/mkdocs/docs/tutorials/cmake_integration.md index da75b79e..9ee52af2 100644 --- a/docs/mkdocs/docs/tutorials/cmake_integration.md +++ b/docs/mkdocs/docs/tutorials/cmake_integration.md @@ -57,7 +57,7 @@ Since CMake v3.11, [`FetchContent`](https://cmake.org/cmake/help/latest/module/F FetchContent_Declare( fkYAML GIT_REPOSITORY https://github.com/fktn-k/fkYAML.git - GIT_TAG v0.3.12 + GIT_TAG v0.3.13 ) FetchContent_MakeAvailable(fkYAML) diff --git a/fkYAML.natvis b/fkYAML.natvis index 609fe880..7c8975ad 100644 --- a/fkYAML.natvis +++ b/fkYAML.natvis @@ -4,26 +4,26 @@ - - - {*(m_node_value.p_sequence)} - {*(m_node_value.p_mapping)} - nullptr - {m_node_value.boolean} - {m_node_value.integer} - {m_node_value.float_val} - {*(m_node_value.p_string)} + + + {*(m_node_value.p_sequence)} + {*(m_node_value.p_mapping)} + nullptr + {m_node_value.boolean} + {m_node_value.integer} + {m_node_value.float_val} + {*(m_node_value.p_string)} - + *(m_node_value.p_sequence),view(simple) - + *(m_node_value.p_mapping),view(simple) - + {second} second diff --git a/include/fkYAML/detail/assert.hpp b/include/fkYAML/detail/assert.hpp index c2db086d..e881f075 100644 --- a/include/fkYAML/detail/assert.hpp +++ b/include/fkYAML/detail/assert.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -#ifndef FK_YAML_DETAIL_ASSERT_HPP_ -#define FK_YAML_DETAIL_ASSERT_HPP_ +#ifndef FK_YAML_DETAIL_ASSERT_HPP +#define FK_YAML_DETAIL_ASSERT_HPP // if FK_YAML_ASSERT is not user-defined. apply the default assert impl. #ifndef FK_YAML_ASSERT @@ -21,4 +19,4 @@ #endif #endif -#endif /* FK_YAML_DETAIL_ASSERT_HPP_ */ +#endif /* FK_YAML_DETAIL_ASSERT_HPP */ diff --git a/include/fkYAML/detail/conversions/from_node.hpp b/include/fkYAML/detail/conversions/from_node.hpp index ff9e212f..4ccdc87c 100644 --- a/include/fkYAML/detail/conversions/from_node.hpp +++ b/include/fkYAML/detail/conversions/from_node.hpp @@ -1,16 +1,15 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_CONVERSIONS_FROM_NODE_HPP_ -#define FK_YAML_DETAIL_CONVERSIONS_FROM_NODE_HPP_ - +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_CONVERSIONS_FROM_NODE_HPP +#define FK_YAML_DETAIL_CONVERSIONS_FROM_NODE_HPP + +#include #include #include #include @@ -197,7 +196,27 @@ inline void from_node(const BasicNodeType& n, FloatType& f) { throw type_error("The target node value type is not float number type.", n.get_type()); } - auto tmp_float = n.template get_value_ref(); + using node_float_type = typename BasicNodeType::float_number_type; + auto tmp_float = n.template get_value_ref(); + + // check if the value is an infinite number (either positive or negative) + if (std::isinf(tmp_float)) { + if (tmp_float == std::numeric_limits::infinity()) { + f = std::numeric_limits::infinity(); + return; + } + + f = -1 * std::numeric_limits::infinity(); + return; + } + + // check if the value is not a number + if (std::isnan(tmp_float)) { + f = std::numeric_limits::quiet_NaN(); + return; + } + + // check if the value is expressible as FloatType. if FK_YAML_UNLIKELY (tmp_float < std::numeric_limits::lowest()) { throw exception("Floating point value underflow detected."); } @@ -269,7 +288,7 @@ namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-n { #endif -/// @brief A blobal object to represent ADL friendly from_node functor. +/// @brief A global object to represent ADL friendly from_node functor. // NOLINTNEXTLINE(misc-definitions-in-headers) FK_YAML_INLINE_VAR constexpr const auto& from_node = detail::static_const::value; @@ -279,4 +298,4 @@ FK_YAML_INLINE_VAR constexpr const auto& from_node = detail::static_const -/// SPDX-License-Identifier: MIT -/// -/// @file +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT // **NOTE FOR LIBARARY DEVELOPERS**: // Implementations in this header file are intentionally optimized for conversions between YAML scalars and native C++ // types. So, some implementations don't follow the convensions in the standard C++ functions. For example, octals must // begin with "0o" (not "0"), which is specified in the YAML spec 1.2. -#ifndef FK_YAML_CONVERSIONS_SCALAR_CONV_HPP_ -#define FK_YAML_CONVERSIONS_SCALAR_CONV_HPP_ +#ifndef FK_YAML_CONVERSIONS_SCALAR_CONV_HPP +#define FK_YAML_CONVERSIONS_SCALAR_CONV_HPP #include #include @@ -763,7 +761,7 @@ inline bool atof_impl(const char* p_begin, const char* p_end, double& f) { /// @brief Converts a scalar into a floating point value. /// @tparam CharItr The type of char iterators. Its value type must be char (maybe cv-qualified). -/// @tparam FloatType The output floatint point value type. +/// @tparam FloatType The output floating point value type. /// @param begin The iterator to the first element of the scalar. /// @param end The iterator to the past-the-end element of the scalar. /// @param f The output floating point value holder. @@ -793,6 +791,11 @@ inline bool atof(CharItr begin, CharItr end, FloatType& f) noexcept(noexcept(ato return true; } } + + if (*p_begin == '+') { + // Skip the positive sign since it's sometimes not recognized as part of float value. + ++p_begin; + } } else if (len == 4) { bool is_inf_scalar = (std::strncmp(p_begin, ".inf", 4) == 0) || (std::strncmp(p_begin, ".Inf", 4) == 0) || @@ -831,4 +834,4 @@ inline bool atof(CharItr begin, CharItr end, FloatType& f) noexcept(noexcept(ato FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_CONVERSIONS_SCALAR_CONV_HPP_ */ +#endif /* FK_YAML_CONVERSIONS_SCALAR_CONV_HPP */ diff --git a/include/fkYAML/detail/conversions/to_node.hpp b/include/fkYAML/detail/conversions/to_node.hpp index 1a70fbc5..66232d5d 100644 --- a/include/fkYAML/detail/conversions/to_node.hpp +++ b/include/fkYAML/detail/conversions/to_node.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_CONVERSIONS_TO_NODE_HPP_ -#define FK_YAML_DETAIL_CONVERSIONS_TO_NODE_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_CONVERSIONS_TO_NODE_HPP +#define FK_YAML_DETAIL_CONVERSIONS_TO_NODE_HPP #include @@ -27,11 +25,11 @@ FK_YAML_DETAIL_NAMESPACE_BEGIN /////////////////////////////////// /// @brief The external constructor template for basic_node objects. -/// @note All the non-specialized instanciations results in compilation error since such instantiations are not +/// @note All the non-specialized instantiations results in compilation error since such instantiations are not /// supported. /// @warning All the specialization must call n.m_node_value.destroy() first in the construct function to avoid /// memory leak. -/// @tparam node_type The resulting YAMK node value type. +/// @tparam node_type The resulting YAML node value type. template struct external_node_constructor; @@ -215,7 +213,7 @@ inline void to_node(BasicNodeType& n, T&& s) noexcept { } /// @brief to_node function for BasicNodeType::mapping_type objects. -/// @tparam BasicNodeType A basid_node template instance type. +/// @tparam BasicNodeType A basic_node template instance type. /// @tparam T A mapping node value type. /// @param n A basic_node object. /// @param m A mapping node value object. @@ -329,7 +327,7 @@ namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-n { #endif -/// @brief A blobal object to represent ADL friendly to_node functor. +/// @brief A global object to represent ADL friendly to_node functor. // NOLINTNEXTLINE(misc-definitions-in-headers) FK_YAML_INLINE_VAR constexpr const auto& to_node = detail::static_const::value; @@ -339,4 +337,4 @@ FK_YAML_INLINE_VAR constexpr const auto& to_node = detail::static_const -/// SPDX-License-Identifier: MIT -/// -/// @file +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -#ifndef TO__string_HPP_ -#define TO__string_HPP_ +#ifndef FK_YAML_DETAIL_CONVERSIONS_TO_STRING_HPP +#define FK_YAML_DETAIL_CONVERSIONS_TO_STRING_HPP #include #include @@ -80,8 +78,15 @@ inline enable_if_t::value> to_string(FloatType std::ostringstream oss; oss << f; s = oss.str(); + + // If `f` is actually an integer, ".0" must be appended. The result would cause roundtrip issue otherwise. + // https://github.com/fktn-k/fkYAML/issues/405 + FloatType diff = f - std::floor(f); + if (diff < std::numeric_limits::min()) { + s += ".0"; + } } FK_YAML_DETAIL_NAMESPACE_END -#endif /* TO__string_HPP_ */ +#endif /* FK_YAML_DETAIL_CONVERSIONS_TO_STRING_HPP */ diff --git a/include/fkYAML/detail/document_metainfo.hpp b/include/fkYAML/detail/document_metainfo.hpp index 814f9cbe..0247df9a 100644 --- a/include/fkYAML/detail/document_metainfo.hpp +++ b/include/fkYAML/detail/document_metainfo.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -#ifndef FK_YAML_DETAIL_DOCUMENT_METAINFO_HPP_ -#define FK_YAML_DETAIL_DOCUMENT_METAINFO_HPP_ +#ifndef FK_YAML_DETAIL_DOCUMENT_METAINFO_HPP +#define FK_YAML_DETAIL_DOCUMENT_METAINFO_HPP #include #include @@ -25,7 +23,7 @@ template named_handle_map {}; - /// The map of anchor node which allowes for key duplication. + /// The map of anchor node which allows for key duplication. std::multimap anchor_table {}; }; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_DOCUMENT_METAINFO_HPP_ */ +#endif /* FK_YAML_DETAIL_DOCUMENT_METAINFO_HPP */ diff --git a/include/fkYAML/detail/encodings/uri_encoding.hpp b/include/fkYAML/detail/encodings/uri_encoding.hpp index 2859fad1..2daeac6a 100644 --- a/include/fkYAML/detail/encodings/uri_encoding.hpp +++ b/include/fkYAML/detail/encodings/uri_encoding.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_ENCODINGS_URI_ENCODING_HPP_ -#define FK_YAML_DETAIL_ENCODINGS_URI_ENCODING_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_ENCODINGS_URI_ENCODING_HPP +#define FK_YAML_DETAIL_ENCODINGS_URI_ENCODING_HPP #include #include @@ -124,4 +122,4 @@ class uri_encoding { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_ENCODINGS_URI_ENCODING_HPP_ */ +#endif /* FK_YAML_DETAIL_ENCODINGS_URI_ENCODING_HPP */ diff --git a/include/fkYAML/detail/encodings/utf_encode_detector.hpp b/include/fkYAML/detail/encodings/utf_encode_detector.hpp index 37932607..25dab63e 100644 --- a/include/fkYAML/detail/encodings/utf_encode_detector.hpp +++ b/include/fkYAML/detail/encodings/utf_encode_detector.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_DETECTOR_HPP_ -#define FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_DETECTOR_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_DETECTOR_HPP +#define FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_DETECTOR_HPP #include #include @@ -25,7 +23,7 @@ FK_YAML_DETAIL_NAMESPACE_BEGIN /// @brief Detect an encoding type for UTF-8 expected inputs. /// @note This function doesn't support the case where the first character is null. /// @param[in] bytes 4 bytes of an input character sequence. -/// @param[out] has_bom Whether or not the input contains a BOM. +/// @param[out] has_bom Whether the input contains a BOM. /// @return A detected encoding type. inline utf_encode_t detect_encoding_type(const std::array& bytes, bool& has_bom) noexcept { has_bom = false; @@ -334,4 +332,4 @@ struct stream_utf_encode_detector { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_DETECTOR_HPP_ */ +#endif /* FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_DETECTOR_HPP */ diff --git a/include/fkYAML/detail/encodings/utf_encode_t.hpp b/include/fkYAML/detail/encodings/utf_encode_t.hpp index 850e2ca8..a860ac6c 100644 --- a/include/fkYAML/detail/encodings/utf_encode_t.hpp +++ b/include/fkYAML/detail/encodings/utf_encode_t.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -#ifndef FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_T_HPP_ -#define FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_T_HPP_ +#ifndef FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_T_HPP +#define FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_T_HPP #include @@ -27,4 +25,4 @@ enum class utf_encode_t { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_T_HPP_ */ +#endif /* FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_T_HPP */ diff --git a/include/fkYAML/detail/encodings/utf_encodings.hpp b/include/fkYAML/detail/encodings/utf_encodings.hpp index f1938367..d56273d6 100644 --- a/include/fkYAML/detail/encodings/utf_encodings.hpp +++ b/include/fkYAML/detail/encodings/utf_encodings.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -#ifndef FK_YAML_DETAIL_ENCODINGS_UTF_ENCODINGS_HPP_ -#define FK_YAML_DETAIL_ENCODINGS_UTF_ENCODINGS_HPP_ +#ifndef FK_YAML_DETAIL_ENCODINGS_UTF_ENCODINGS_HPP +#define FK_YAML_DETAIL_ENCODINGS_UTF_ENCODINGS_HPP #include #include @@ -286,4 +284,4 @@ inline void from_utf32(const char32_t utf32, std::array& utf8, uint3 FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_ENCODINGS_UTF_ENCODINGS_HPP_ */ +#endif /* FK_YAML_DETAIL_ENCODINGS_UTF_ENCODINGS_HPP */ diff --git a/include/fkYAML/detail/encodings/yaml_escaper.hpp b/include/fkYAML/detail/encodings/yaml_escaper.hpp index cc57ccce..ba9b621f 100644 --- a/include/fkYAML/detail/encodings/yaml_escaper.hpp +++ b/include/fkYAML/detail/encodings/yaml_escaper.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -#ifndef FK_YAML_DETAIL_ENCODINGS_YAML_ESCAPER_HPP_ -#define FK_YAML_DETAIL_ENCODINGS_YAML_ESCAPER_HPP_ +#ifndef FK_YAML_DETAIL_ENCODINGS_YAML_ESCAPER_HPP +#define FK_YAML_DETAIL_ENCODINGS_YAML_ESCAPER_HPP #include @@ -342,4 +340,4 @@ class yaml_escaper { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_ENCODINGS_YAML_ESCAPER_HPP_ */ +#endif /* FK_YAML_DETAIL_ENCODINGS_YAML_ESCAPER_HPP */ diff --git a/include/fkYAML/detail/input/block_scalar_header.hpp b/include/fkYAML/detail/input/block_scalar_header.hpp new file mode 100644 index 00000000..f9704440 --- /dev/null +++ b/include/fkYAML/detail/input/block_scalar_header.hpp @@ -0,0 +1,35 @@ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_INPUT_BLOCK_SCALAR_HEADER_HPP +#define FK_YAML_DETAIL_INPUT_BLOCK_SCALAR_HEADER_HPP + +#include + +#include + +FK_YAML_DETAIL_NAMESPACE_BEGIN + +/// @brief Definition of chomping indicator types. +enum class chomping_indicator_t { + STRIP, //!< excludes final line breaks and trailing empty lines indicated by `-`. + CLIP, //!< preserves final line breaks but excludes trailing empty lines. no indicator means this type. + KEEP, //!< preserves final line breaks and trailing empty lines indicated by `+`. +}; + +/// @brief Block scalar header information. +struct block_scalar_header { + /// Chomping indicator type. + chomping_indicator_t chomp {chomping_indicator_t::CLIP}; + /// Indentation for block scalar contents. + uint32_t indent {0}; +}; + +FK_YAML_DETAIL_NAMESPACE_END + +#endif /* FK_YAML_DETAIL_INPUT_BLOCK_SCALAR_HEADER_HPP */ diff --git a/include/fkYAML/detail/input/deserializer.hpp b/include/fkYAML/detail/input/deserializer.hpp index fc56734e..e327b5ea 100644 --- a/include/fkYAML/detail/input/deserializer.hpp +++ b/include/fkYAML/detail/input/deserializer.hpp @@ -1,28 +1,25 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_INPUT_DESERIALIZER_HPP_ -#define FK_YAML_DETAIL_INPUT_DESERIALIZER_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_INPUT_DESERIALIZER_HPP +#define FK_YAML_DETAIL_INPUT_DESERIALIZER_HPP #include #include #include #include -#include #include #include +#include #include #include #include -#include #include #include #include @@ -45,18 +42,12 @@ class basic_deserializer { using doc_metainfo_type = document_metainfo; /** A type for the tag resolver. */ using tag_resolver_type = tag_resolver; + /** A type for the scalar parser. */ + using scalar_parser_type = scalar_parser; /** A type for sequence node value containers. */ using sequence_type = typename basic_node_type::sequence_type; /** A type for mapping node value containers. */ using mapping_type = typename basic_node_type::mapping_type; - /** A type for boolean node values. */ - using boolean_type = typename basic_node_type::boolean_type; - /** A type for integer node values. */ - using integer_type = typename basic_node_type::integer_type; - /** A type for floating point node values. */ - using float_number_type = typename basic_node_type::float_number_type; - /** A type for string node values. */ - using string_type = typename basic_node_type::string_type; /// @brief Definition of state types of parse contexts. enum class context_state_t { @@ -156,7 +147,7 @@ class basic_deserializer { } while (type != lexical_token_t::END_OF_BUFFER); return nodes; - } + } // LCOV_EXCL_LINE private: /// @brief Deserialize a YAML document into a YAML node. @@ -194,6 +185,7 @@ class basic_deserializer { } case lexical_token_t::SEQUENCE_FLOW_BEGIN: ++m_flow_context_depth; + lexer.set_context_state(true); root = basic_node_type::sequence(); apply_directive_set(root); apply_node_properties(root); @@ -203,6 +195,7 @@ class basic_deserializer { break; case lexical_token_t::MAPPING_FLOW_BEGIN: ++m_flow_context_depth; + lexer.set_context_state(true); root = basic_node_type::mapping(); apply_directive_set(root); apply_node_properties(root); @@ -210,19 +203,48 @@ class basic_deserializer { lexer.get_lines_processed(), lexer.get_last_token_begin_pos(), context_state_t::FLOW_MAPPING, &root); token = lexer.get_next_token(); break; - default: { + case lexical_token_t::EXPLICIT_KEY_PREFIX: { + // If the explicit key prefix (? ) is detected here, the root node of current document must be a mapping. + // Also, tag and anchor if any are associated to the root mapping node. + // No get_next_token() call here to handle the token event in the deserialize_node() function. root = basic_node_type::mapping(); apply_directive_set(root); - if (found_props && line < lexer.get_lines_processed()) { - // If node properties and a followed node are on the different line, the properties belong to the root - // node. - apply_node_properties(root); - } + apply_node_properties(root); parse_context context( lexer.get_lines_processed(), lexer.get_last_token_begin_pos(), context_state_t::BLOCK_MAPPING, &root); m_context_stack.emplace_back(std::move(context)); break; } + case lexical_token_t::BLOCK_LITERAL_SCALAR: + case lexical_token_t::BLOCK_FOLDED_SCALAR: + // If a block scalar token is detected here, current document contains single scalar. + // Do nothing here since the token is handled in the deserialize_node() function. + break; + case lexical_token_t::PLAIN_SCALAR: + case lexical_token_t::SINGLE_QUOTED_SCALAR: + case lexical_token_t::DOUBLE_QUOTED_SCALAR: + case lexical_token_t::ALIAS_PREFIX: + // Defer handling the above token events until the next call on the deserialize_scalar() function since the + // meaning depends on subsequent events. + if (found_props && line < lexer.get_lines_processed()) { + // If node properties and a followed node are on the different line, the properties belong to the root + // node. + if (m_needs_anchor_impl) { + m_root_anchor_name = std::move(m_anchor_name); + m_needs_anchor_impl = false; + m_anchor_name.clear(); + } + + if (m_needs_tag_impl) { + m_root_tag_name = std::move(m_tag_name); + m_needs_tag_impl = false; + m_tag_name.clear(); + } + } + break; + default: + // Do nothing since current document has no contents. + break; } mp_current_node = &root; @@ -247,9 +269,10 @@ class basic_deserializer { /// @brief Deserializes the YAML directives if specified. /// @param lexer The lexical analyzer to be used. - /// @param last_type The variable to store the last lexical token type. + /// @param last_token Storage for last lexical token type. void deserialize_directives(lexer_type& lexer, lexical_token& last_token) { bool lacks_end_of_directives_marker = false; + lexer.set_document_state(true); for (;;) { lexical_token token = lexer.get_next_token(); @@ -329,6 +352,7 @@ class basic_deserializer { } // end the parsing of directives if the other tokens are found. last_token = token; + lexer.set_document_state(false); return; } } @@ -336,7 +360,8 @@ class basic_deserializer { /// @brief Deserializes the YAML nodes recursively. /// @param lexer The lexical analyzer to be used. - /// @param first_type The first lexical token type. + /// @param first_type The first lexical token. + /// @param last_type Storage for last lexical token type. void deserialize_node(lexer_type& lexer, const lexical_token& first_token, lexical_token_t& last_type) { lexical_token token = first_token; uint32_t line = lexer.get_lines_processed(); @@ -456,7 +481,7 @@ class basic_deserializer { // foo: !!map // !!str 123: true // ^ - // this !!str tag overwrites the preceeding !!map tag. + // this !!str tag overwrites the preceding !!map tag. // ``` *mp_current_node = basic_node_type::mapping(); apply_directive_set(*mp_current_node); @@ -467,7 +492,7 @@ class basic_deserializer { } if (token.type == lexical_token_t::SEQUENCE_BLOCK_PREFIX) { - // a key separator preceeding block sequence entries + // a key separator preceding block sequence entries *mp_current_node = basic_node_type::sequence(); apply_directive_set(*mp_current_node); apply_node_properties(*mp_current_node); @@ -540,11 +565,6 @@ class basic_deserializer { continue; } - // just ignore directives - case lexical_token_t::YAML_VER_DIRECTIVE: - case lexical_token_t::TAG_DIRECTIVE: - case lexical_token_t::INVALID_DIRECTIVE: - break; case lexical_token_t::ANCHOR_PREFIX: case lexical_token_t::TAG_PREFIX: deserialize_node_properties(lexer, token, line, indent); @@ -579,6 +599,8 @@ class basic_deserializer { } case lexical_token_t::SEQUENCE_FLOW_BEGIN: if (m_flow_context_depth == 0) { + lexer.set_context_state(true); + uint32_t pop_num = 0; if (indent == 0) { pop_num = static_cast(m_context_stack.size() - 1); @@ -602,7 +624,7 @@ class basic_deserializer { }); bool is_indent_valid = (target_itr != m_context_stack.rend()); if FK_YAML_UNLIKELY (!is_indent_valid) { - throw parse_error("Detected invalid indentaion.", line, indent); + throw parse_error("Detected invalid indentation.", line, indent); } pop_num = static_cast(std::distance(m_context_stack.rbegin(), target_itr)); @@ -616,7 +638,7 @@ class basic_deserializer { } } else if FK_YAML_UNLIKELY (m_flow_token_state == flow_token_state_t::NEEDS_SEPARATOR_OR_SUFFIX) { - throw parse_error("Flow sequence begininng is found without separated with a comma.", line, indent); + throw parse_error("Flow sequence beginning is found without separated with a comma.", line, indent); } ++m_flow_context_depth; @@ -654,7 +676,10 @@ class basic_deserializer { if FK_YAML_UNLIKELY (m_flow_context_depth == 0) { throw parse_error("Flow sequence ending is found outside the flow context.", line, indent); } - --m_flow_context_depth; + + if (--m_flow_context_depth == 0) { + lexer.set_context_state(false); + } // find the corresponding flow sequence beginning. auto itr = std::find_if( // LCOV_EXCL_LINE @@ -721,6 +746,8 @@ class basic_deserializer { } case lexical_token_t::MAPPING_FLOW_BEGIN: if (m_flow_context_depth == 0) { + lexer.set_context_state(true); + uint32_t pop_num = 0; if (indent == 0) { pop_num = static_cast(m_context_stack.size() - 1); @@ -744,7 +771,7 @@ class basic_deserializer { }); bool is_indent_valid = (target_itr != m_context_stack.rend()); if FK_YAML_UNLIKELY (!is_indent_valid) { - throw parse_error("Detected invalid indentaion.", line, indent); + throw parse_error("Detected invalid indentation.", line, indent); } pop_num = static_cast(std::distance(m_context_stack.rbegin(), target_itr)); @@ -758,7 +785,7 @@ class basic_deserializer { } } else if FK_YAML_UNLIKELY (m_flow_token_state == flow_token_state_t::NEEDS_SEPARATOR_OR_SUFFIX) { - throw parse_error("Flow mapping begininng is found without separated with a comma.", line, indent); + throw parse_error("Flow mapping beginning is found without separated with a comma.", line, indent); } ++m_flow_context_depth; @@ -799,7 +826,10 @@ class basic_deserializer { if FK_YAML_UNLIKELY (m_flow_context_depth == 0) { throw parse_error("Flow mapping ending is found outside the flow context.", line, indent); } - --m_flow_context_depth; + + if (--m_flow_context_depth == 0) { + lexer.set_context_state(false); + } // find the corresponding flow mapping beginning. auto itr = std::find_if( // LCOV_EXCL_LINE @@ -871,23 +901,77 @@ class basic_deserializer { } m_flow_token_state = flow_token_state_t::NEEDS_VALUE_OR_SUFFIX; break; - case lexical_token_t::ALIAS_PREFIX: + case lexical_token_t::ALIAS_PREFIX: { + if FK_YAML_UNLIKELY (m_needs_tag_impl) { + throw parse_error("Tag cannot be specified to an alias node", line, indent); + } + + const std::string token_str = std::string(token.str.begin(), token.str.end()); + + uint32_t anchor_counts = static_cast(mp_meta->anchor_table.count(token_str)); + if FK_YAML_UNLIKELY (anchor_counts == 0) { + throw parse_error("The given anchor name must appear prior to the alias node.", line, indent); + } + + basic_node_type node {}; + node.m_attrs |= detail::node_attr_bits::alias_bit; + node.m_prop.anchor = std::move(token_str); + detail::node_attr_bits::set_anchor_offset(anchor_counts - 1, node.m_attrs); + + apply_directive_set(node); + apply_node_properties(node); + + bool should_continue = deserialize_scalar(lexer, std::move(node), indent, line, token); + if (should_continue) { + continue; + } + break; + } case lexical_token_t::PLAIN_SCALAR: case lexical_token_t::SINGLE_QUOTED_SCALAR: - case lexical_token_t::DOUBLE_QUOTED_SCALAR: - case lexical_token_t::BLOCK_SCALAR: { - bool do_continue = deserialize_scalar(lexer, indent, line, token); + case lexical_token_t::DOUBLE_QUOTED_SCALAR: { + tag_t tag_type {tag_t::NONE}; + if (m_needs_tag_impl) { + tag_type = tag_resolver_type::resolve_tag(m_tag_name, mp_meta); + } + + basic_node_type node = scalar_parser_type(line, indent).parse_flow(token.type, tag_type, token.str); + apply_directive_set(node); + apply_node_properties(node); + + bool do_continue = deserialize_scalar(lexer, std::move(node), indent, line, token); if (do_continue) { continue; } break; } + case lexical_token_t::BLOCK_LITERAL_SCALAR: + case lexical_token_t::BLOCK_FOLDED_SCALAR: { + tag_t tag_type {tag_t::NONE}; + if (m_needs_tag_impl) { + tag_type = tag_resolver_type::resolve_tag(m_tag_name, mp_meta); + } + + basic_node_type node = + scalar_parser_type(line, indent) + .parse_block(token.type, tag_type, token.str, lexer.get_block_scalar_header()); + apply_directive_set(node); + apply_node_properties(node); + + deserialize_scalar(lexer, std::move(node), indent, line, token); + continue; + } // these tokens end parsing the current YAML document. case lexical_token_t::END_OF_BUFFER: // This handles an empty input. case lexical_token_t::END_OF_DIRECTIVES: case lexical_token_t::END_OF_DOCUMENT: last_type = token.type; return; + // no way to come here while lexically analyzing document contents. + case lexical_token_t::YAML_VER_DIRECTIVE: // LCOV_EXCL_LINE + case lexical_token_t::TAG_DIRECTIVE: // LCOV_EXCL_LINE + case lexical_token_t::INVALID_DIRECTIVE: // LCOV_EXCL_LINE + break; // LCOV_EXCL_LINE } token = lexer.get_next_token(); @@ -986,7 +1070,7 @@ class basic_deserializer { }); bool is_indent_valid = (target_itr != m_context_stack.rend()); if FK_YAML_UNLIKELY (!is_indent_valid) { - throw parse_error("Detected invalid indentaion.", line, indent); + throw parse_error("Detected invalid indentation.", line, indent); } pop_num = static_cast(std::distance(m_context_stack.rbegin(), target_itr)); @@ -1037,149 +1121,32 @@ class basic_deserializer { // a scalar node *mp_current_node = std::move(node_value); - if (m_flow_context_depth > 0 || m_context_stack.back().state != context_state_t::BLOCK_MAPPING_EXPLICIT_KEY) { - m_context_stack.pop_back(); - mp_current_node = m_context_stack.back().p_node; - - if (m_flow_context_depth > 0) { - m_flow_token_state = flow_token_state_t::NEEDS_SEPARATOR_OR_SUFFIX; - } - } - } - - /// @brief Creates a YAML scalar node with the retrieved token information by the lexer. - /// @param lexer The lexical analyzer to be used. - /// @param type The type of the last lexical token. - /// @param indent The last indent size. - /// @param line The last line. - /// @return The created YAML scalar node. - basic_node_type create_scalar_node(const lexical_token& token, uint32_t indent, uint32_t line) { - lexical_token_t type = token.type; - FK_YAML_ASSERT( - type == lexical_token_t::PLAIN_SCALAR || type == lexical_token_t::SINGLE_QUOTED_SCALAR || - type == lexical_token_t::DOUBLE_QUOTED_SCALAR || type == lexical_token_t::BLOCK_SCALAR || - type == lexical_token_t::ALIAS_PREFIX); - - node_type value_type {node_type::STRING}; - if (type == lexical_token_t::PLAIN_SCALAR) { - value_type = scalar_scanner::scan(token.str.begin(), token.str.end()); - } - - if (m_needs_tag_impl) { - if FK_YAML_UNLIKELY (type == lexical_token_t::ALIAS_PREFIX) { - throw parse_error("Tag cannot be specified to alias nodes", line, indent); - } - - tag_t tag_type = tag_resolver_type::resolve_tag(m_tag_name, mp_meta); - - FK_YAML_ASSERT(tag_type != tag_t::SEQUENCE && tag_type != tag_t::MAPPING); - - switch (tag_type) { - case tag_t::NULL_VALUE: - value_type = node_type::NULL_OBJECT; - break; - case tag_t::BOOLEAN: - value_type = node_type::BOOLEAN; - break; - case tag_t::INTEGER: - value_type = node_type::INTEGER; - break; - case tag_t::FLOATING_NUMBER: - value_type = node_type::FLOAT; - break; - case tag_t::STRING: - value_type = node_type::STRING; - break; - case tag_t::NON_SPECIFIC: - // scalars with the non-specific tag is resolved to a string tag. - // See the "Non-Specific Tags" section in https://yaml.org/spec/1.2.2/#691-node-tags. - value_type = node_type::STRING; - break; - case tag_t::CUSTOM_TAG: - default: - break; - } - } - - basic_node_type node {}; - - if (type == lexical_token_t::ALIAS_PREFIX) { - const std::string token_str = std::string(token.str.begin(), token.str.end()); - - uint32_t anchor_counts = static_cast(mp_meta->anchor_table.count(token_str)); - if FK_YAML_UNLIKELY (anchor_counts == 0) { - throw parse_error("The given anchor name must appear prior to the alias node.", line, indent); - } - - node.m_attrs |= detail::node_attr_bits::alias_bit; - node.m_prop.anchor = std::move(token_str); - detail::node_attr_bits::set_anchor_offset(anchor_counts - 1, node.m_attrs); - - apply_directive_set(node); - apply_node_properties(node); - - return node; - } + if FK_YAML_LIKELY (!m_context_stack.empty()) { + if (m_flow_context_depth > 0 || + m_context_stack.back().state != context_state_t::BLOCK_MAPPING_EXPLICIT_KEY) { + m_context_stack.pop_back(); + mp_current_node = m_context_stack.back().p_node; - switch (value_type) { - case node_type::NULL_OBJECT: { - std::nullptr_t null = nullptr; - bool converted = detail::aton(token.str.begin(), token.str.end(), null); - if FK_YAML_UNLIKELY (!converted) { - throw parse_error("Failed to convert a scalar to a null.", line, indent); - } - // The above `node` variable is already null, so no instance creation is needed. - break; - } - case node_type::BOOLEAN: { - boolean_type boolean = static_cast(false); - bool converted = detail::atob(token.str.begin(), token.str.end(), boolean); - if FK_YAML_UNLIKELY (!converted) { - throw parse_error("Failed to convert a scalar to a boolean.", line, indent); - } - node = basic_node_type(boolean); - break; - } - case node_type::INTEGER: { - integer_type integer = 0; - bool converted = detail::atoi(token.str.begin(), token.str.end(), integer); - if FK_YAML_UNLIKELY (!converted) { - throw parse_error("Failed to convert a scalar to an integer.", line, indent); - } - node = basic_node_type(integer); - break; - } - case node_type::FLOAT: { - float_number_type float_val = 0; - bool converted = detail::atof(token.str.begin(), token.str.end(), float_val); - if FK_YAML_UNLIKELY (!converted) { - throw parse_error("Failed to convert a scalar to a floating point value", line, indent); + if (m_flow_context_depth > 0) { + m_flow_token_state = flow_token_state_t::NEEDS_SEPARATOR_OR_SUFFIX; + } } - node = basic_node_type(float_val); - break; } - case node_type::STRING: - node = basic_node_type(std::string(token.str.begin(), token.str.end())); - break; - default: // LCOV_EXCL_LINE - break; // LCOV_EXCL_LINE + else { + // single scalar document. + return; } - - apply_directive_set(node); - apply_node_properties(node); - - return node; } /// @brief Deserialize a detected scalar node. /// @param lexer The lexical analyzer to be used. - /// @param node A detected scalar node by a lexer. + /// @param node A scalar node. /// @param indent The current indentation width. Can be updated in this function. /// @param line The number of processed lines. Can be updated in this function. + /// @param token The storage for last lexical token. /// @return true if next token has already been got, false otherwise. - bool deserialize_scalar(lexer_type& lexer, uint32_t& indent, uint32_t& line, lexical_token& token) { - basic_node_type node = create_scalar_node(token, indent, line); - + bool deserialize_scalar( + lexer_type& lexer, basic_node_type&& node, uint32_t& indent, uint32_t& line, lexical_token& token) { if (mp_current_node->is_mapping()) { add_new_key(std::move(node), line, indent); return false; @@ -1206,24 +1173,43 @@ class basic_deserializer { } if (mp_current_node->is_scalar()) { - parse_context& cur_context = m_context_stack.back(); - switch (cur_context.state) { - case context_state_t::BLOCK_MAPPING_EXPLICIT_KEY: - case context_state_t::BLOCK_MAPPING_EXPLICIT_VALUE: - m_context_stack.emplace_back(line, indent, context_state_t::BLOCK_MAPPING, mp_current_node); - break; - default: - if FK_YAML_UNLIKELY (cur_context.line == line) { - throw parse_error("Multiple mapping keys are specified on the same line.", line, indent); + if FK_YAML_LIKELY (!m_context_stack.empty()) { + parse_context& cur_context = m_context_stack.back(); + switch (cur_context.state) { + case context_state_t::BLOCK_MAPPING_EXPLICIT_KEY: + case context_state_t::BLOCK_MAPPING_EXPLICIT_VALUE: + m_context_stack.emplace_back(line, indent, context_state_t::BLOCK_MAPPING, mp_current_node); + break; + default: + if FK_YAML_UNLIKELY (cur_context.line == line) { + throw parse_error("Multiple mapping keys are specified on the same line.", line, indent); + } + cur_context.line = line; + cur_context.indent = indent; + cur_context.state = context_state_t::BLOCK_MAPPING; + break; } - cur_context.line = line; - cur_context.indent = indent; - cur_context.state = context_state_t::BLOCK_MAPPING; - break; + + *mp_current_node = basic_node_type::mapping(); + apply_directive_set(*mp_current_node); } + else { + // root mapping node - *mp_current_node = basic_node_type::mapping(); - apply_directive_set(*mp_current_node); + m_context_stack.emplace_back(line, indent, context_state_t::BLOCK_MAPPING, mp_current_node); + *mp_current_node = basic_node_type::mapping(); + apply_directive_set(*mp_current_node); + + // apply node properties if any to the root mapping node. + if (!m_root_anchor_name.empty()) { + mp_current_node->add_anchor_name(std::move(m_root_anchor_name)); + m_root_anchor_name.clear(); + } + if (!m_root_tag_name.empty()) { + mp_current_node->add_tag_name(std::move(m_root_tag_name)); + m_root_tag_name.clear(); + } + } } add_new_key(std::move(node), line, indent); } @@ -1282,8 +1268,12 @@ class basic_deserializer { std::string m_anchor_name {}; /// The last tag name. std::string m_tag_name {}; + /// The root YAML anchor name. (maybe empty and unused) + std::string m_root_anchor_name {}; + /// The root tag name. (maybe empty and unused) + std::string m_root_tag_name {}; }; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_INPUT_DESERIALIZER_HPP_ */ +#endif /* FK_YAML_DETAIL_INPUT_DESERIALIZER_HPP */ diff --git a/include/fkYAML/detail/input/input_adapter.hpp b/include/fkYAML/detail/input/input_adapter.hpp index a472ca37..675fd094 100644 --- a/include/fkYAML/detail/input/input_adapter.hpp +++ b/include/fkYAML/detail/input/input_adapter.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_INPUT_INPUT_ADAPTER_HPP_ -#define FK_YAML_DETAIL_INPUT_INPUT_ADAPTER_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_INPUT_INPUT_ADAPTER_HPP +#define FK_YAML_DETAIL_INPUT_INPUT_ADAPTER_HPP #include #include @@ -46,7 +44,7 @@ class iterator_input_adapter create_iterator_input_adapter( } // anonymous namespace -/// @brief A factory method for iterator_input_adapter objects with ieterator values. +/// @brief A factory method for iterator_input_adapter objects with iterator values. /// @tparam ItrType An iterator type. /// @param begin The beginning of iterators. /// @param end The end of iterators. @@ -987,7 +985,7 @@ struct container_input_adapter_factory {}; template struct container_input_adapter_factory< ContainerType, void_t()), end(std::declval()))>> { - /// Whether or not ContainerType is a contiguous container. + /// Whether ContainerType is a contiguous container. static constexpr bool is_contiguous = is_contiguous_container::value; /// A type for resulting input adapter object. @@ -1038,4 +1036,4 @@ inline stream_input_adapter input_adapter(std::istream& stream) { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_INPUT_INPUT_ADAPTER_HPP_ */ +#endif /* FK_YAML_DETAIL_INPUT_INPUT_ADAPTER_HPP */ diff --git a/include/fkYAML/detail/input/lexical_analyzer.hpp b/include/fkYAML/detail/input/lexical_analyzer.hpp index 687ee1b6..2b80e942 100644 --- a/include/fkYAML/detail/input/lexical_analyzer.hpp +++ b/include/fkYAML/detail/input/lexical_analyzer.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_INPUT_LEXICAL_ANALIZER_HPP_ -#define FK_YAML_DETAIL_INPUT_LEXICAL_ANALIZER_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_INPUT_LEXICAL_ANALYZER_HPP +#define FK_YAML_DETAIL_INPUT_LEXICAL_ANALYZER_HPP #include #include @@ -19,7 +17,7 @@ #include #include #include -#include +#include #include #include #include @@ -28,29 +26,28 @@ FK_YAML_DETAIL_NAMESPACE_BEGIN +/// @brief Lexical token information struct lexical_token { + /// Lexical token type. lexical_token_t type {lexical_token_t::END_OF_BUFFER}; + /// Lexical token contents. str_view str {}; }; -/// @brief A class which lexically analizes YAML formatted inputs. -class lexical_analyzer { -private: - enum class block_style_indicator_t { - LITERAL, //!< keeps newlines inside the block as they are indicated by a pipe `|`. - FOLDED, //!< replaces newlines inside the block with spaces indicated by a right angle bracket `>`. - }; +namespace { - enum class chomping_indicator_t { - STRIP, //!< excludes final line breaks and traiing empty lines indicated by `-`. - KEEP, //!< preserves final line breaks but excludes trailing empty lines. no indicator means this type. - CLIP, //!< preserves final line breaks and trailing empty lines indicated by `+`. - }; +// whether the current context is flow(1) or block(0) +const uint32_t flow_context_bit = 1u << 0u; +// whether the current document part is directive(1) or content(0) +const uint32_t document_directive_bit = 1u << 1u; +} // anonymous namespace + +/// @brief A class which lexically analyzes YAML formatted inputs. +class lexical_analyzer { public: /// @brief Construct a new lexical_analyzer object. - /// @tparam InputAdapterType The type of the input adapter. - /// @param input_adapter An input adapter object. + /// @param input_buffer An input buffer. explicit lexical_analyzer(str_view input_buffer) noexcept : m_input_buffer(input_buffer), m_cur_itr(m_input_buffer.begin()), @@ -82,15 +79,12 @@ class lexical_analyzer { return token; } - switch (*m_cur_itr) { - case ' ': + if (*m_cur_itr == ' ') { token.type = lexical_token_t::EXPLICIT_KEY_PREFIX; return token; - default: - scan_scalar(token); - return token; } - case ':': { // key separater + break; + case ':': // key separator if (++m_cur_itr == m_end_itr) { token.type = lexical_token_t::KEY_SEPARATOR; return token; @@ -100,28 +94,25 @@ class lexical_analyzer { case ' ': case '\t': case '\n': - break; + token.type = lexical_token_t::KEY_SEPARATOR; + return token; case ',': case '[': case ']': case '{': case '}': - if (m_flow_context_depth > 0) { - // the above characters are not "safe" to be followed in a flow context. + if (m_state & flow_context_bit) { + // Flow indicators are not "safe" to be followed in a flow context. // See https://yaml.org/spec/1.2.2/#733-plain-style for more details. - break; + token.type = lexical_token_t::KEY_SEPARATOR; + return token; } - scan_scalar(token); - return token; + break; default: - scan_scalar(token); - return token; + break; } - - token.type = lexical_token_t::KEY_SEPARATOR; - return token; - } - case ',': // value separater + break; + case ',': // value separator ++m_cur_itr; token.type = lexical_token_t::VALUE_SEPARATOR; return token; @@ -153,8 +144,13 @@ class lexical_analyzer { scan_comment(); return get_next_token(); case '%': // directive prefix - token.type = scan_directive(); - return token; + if (m_state & document_directive_bit) { + token.type = scan_directive(); + return token; + } + // The '%' character can be safely used as the first character in document contents. + // See https://yaml.org/spec/1.2.2/#912-document-markers for more details. + break; case '-': { char next = *(m_cur_itr + 1); switch (next) { @@ -179,26 +175,21 @@ class lexical_analyzer { } } - scan_scalar(token); - return token; + break; } case '[': // sequence flow begin - m_flow_context_depth++; ++m_cur_itr; token.type = lexical_token_t::SEQUENCE_FLOW_BEGIN; return token; case ']': // sequence flow end - m_flow_context_depth = (m_flow_context_depth > 0) ? m_flow_context_depth - 1 : 0; ++m_cur_itr; token.type = lexical_token_t::SEQUENCE_FLOW_END; return token; case '{': // mapping flow begin - m_flow_context_depth++; ++m_cur_itr; token.type = lexical_token_t::MAPPING_FLOW_BEGIN; return token; case '}': // mapping flow end - m_flow_context_depth = (m_flow_context_depth > 0) ? m_flow_context_depth - 1 : 0; ++m_cur_itr; token.type = lexical_token_t::MAPPING_FLOW_END; return token; @@ -207,11 +198,16 @@ class lexical_analyzer { case '`': emit_error("Any token cannot start with grave accent(`). It is a reserved indicator for YAML."); case '\"': - case '\'': - scan_scalar(token); + ++m_token_begin_itr; + token.type = lexical_token_t::DOUBLE_QUOTED_SCALAR; + determine_double_quoted_scalar_range(token.str); + check_scalar_content(token.str); return token; - case '+': - scan_scalar(token); + case '\'': + ++m_token_begin_itr; + token.type = lexical_token_t::SINGLE_QUOTED_SCALAR; + determine_single_quoted_scalar_range(token.str); + check_scalar_content(token.str); return token; case '.': { bool is_available = ((m_end_itr - m_cur_itr) > 2); @@ -223,34 +219,33 @@ class lexical_analyzer { return token; } } - - scan_scalar(token); - return token; - } - case '|': { - chomping_indicator_t chomp_type = chomping_indicator_t::KEEP; - uint32_t indent = 0; - ++m_cur_itr; - get_block_style_metadata(chomp_type, indent); - scan_block_style_string_token(block_style_indicator_t::LITERAL, chomp_type, indent); - token.type = lexical_token_t::BLOCK_SCALAR; - token.str = m_value_buffer; - return token; + break; } + case '|': case '>': { - chomping_indicator_t chomp_type = chomping_indicator_t::KEEP; - uint32_t indent = 0; - ++m_cur_itr; - get_block_style_metadata(chomp_type, indent); - scan_block_style_string_token(block_style_indicator_t::FOLDED, chomp_type, indent); - token.type = lexical_token_t::BLOCK_SCALAR; - token.str = m_value_buffer; + str_view sv {m_token_begin_itr, m_end_itr}; + std::size_t header_end_pos = sv.find('\n'); + + FK_YAML_ASSERT(!sv.empty()); + token.type = (sv[0] == '|') ? lexical_token_t::BLOCK_LITERAL_SCALAR : lexical_token_t::BLOCK_FOLDED_SCALAR; + + FK_YAML_ASSERT(header_end_pos != str_view::npos); + str_view header_line = sv.substr(1, header_end_pos - 1); + m_block_scalar_header = convert_to_block_scalar_header(header_line); + + m_token_begin_itr = sv.begin() + (header_end_pos + 1); + scan_block_style_string_token(m_block_scalar_header.indent, token.str); + return token; } default: - scan_scalar(token); - return token; + break; } + + token.type = lexical_token_t::PLAIN_SCALAR; + determine_plain_scalar_range(token.str); + check_scalar_content(token.str); + return token; } /// @brief Get the beginning position of a last token. @@ -283,6 +278,30 @@ class lexical_analyzer { return m_tag_prefix; } + /// @brief Get block scalar header information. + /// @return block_scalar_header Block scalar header information. + block_scalar_header get_block_scalar_header() const noexcept { + return m_block_scalar_header; + } + + /// @brief Toggles the context state between flow and block. + /// @param is_flow_context true: flow context, false: block context + void set_context_state(bool is_flow_context) noexcept { + m_state &= ~flow_context_bit; + if (is_flow_context) { + m_state |= flow_context_bit; + } + } + + /// @brief Toggles the document state between directive and content. + /// @param is_directive true: directive, false: content + void set_document_state(bool is_directive) noexcept { + m_state &= ~document_directive_bit; + if (is_directive) { + m_state |= document_directive_bit; + } + } + private: /// @brief Skip until a newline code or a null character is found. void scan_comment() { @@ -296,7 +315,6 @@ class lexical_analyzer { lexical_token_t scan_directive() { FK_YAML_ASSERT(*m_cur_itr == '%'); - m_value_buffer.clear(); m_token_begin_itr = ++m_cur_itr; bool ends_loop = false; @@ -601,613 +619,269 @@ class lexical_analyzer { // See the "Tag Shorthands" section in https://yaml.org/spec/1.2.2/#691-node-tags. emit_error("named handle has no suffix."); } + } - // get the position of the beginning of a suffix. (!handle!suffix) - std::size_t last_tag_prefix_pos = token.str.find_last_of('!'); - FK_YAML_ASSERT(last_tag_prefix_pos != str_view::npos); + // get the position of last tag prefix character (!) to extract body of tag shorthands. + // tag shorthand is either primary(!tag), secondary(!!tag) or named(!handle!tag). + std::size_t last_tag_prefix_pos = token.str.find_last_of('!'); + FK_YAML_ASSERT(last_tag_prefix_pos != str_view::npos); - str_view tag_uri = token.str.substr(last_tag_prefix_pos + 1); - bool is_valid_uri = uri_encoding::validate(tag_uri.begin(), tag_uri.end()); - if FK_YAML_UNLIKELY (!is_valid_uri) { - emit_error("Invalid URI character is found in a named tag handle."); - } + str_view tag_uri = token.str.substr(last_tag_prefix_pos + 1); + bool is_valid_uri = uri_encoding::validate(tag_uri.begin(), tag_uri.end()); + if FK_YAML_UNLIKELY (!is_valid_uri) { + emit_error("Invalid URI character is found in a named tag handle."); } - } - /// @brief Scan a scalar token, either plain, single-quoted or double-quoted. - /// @param token The token into which the scan result is written. - /// @return lexical_token_t The lexical token type for strings. - void scan_scalar(lexical_token& token) { - m_value_buffer.clear(); - - bool needs_last_single_quote = false; - bool needs_last_double_quote = false; - if (m_cur_itr == m_token_begin_itr) { - needs_last_single_quote = (*m_cur_itr == '\''); - needs_last_double_quote = (*m_cur_itr == '\"'); - if (needs_last_double_quote || needs_last_single_quote) { - m_token_begin_itr = ++m_cur_itr; - token.type = needs_last_double_quote ? lexical_token_t::DOUBLE_QUOTED_SCALAR - : lexical_token_t::SINGLE_QUOTED_SCALAR; - } - else { - token.type = lexical_token_t::PLAIN_SCALAR; - } + // Tag shorthands cannot contain flow indicators({}[],). + // See the "Tag Shorthands" section in https://yaml.org/spec/1.2.2/#691-node-tags. + std::size_t invalid_char_pos = tag_uri.find_first_of("{}[],"); + if (invalid_char_pos != str_view::npos) { + emit_error("Tag shorthand cannot contain flow indicators({}[],)."); } + } - bool is_value_buff_used = extract_string_token(needs_last_single_quote, needs_last_double_quote); - - if (is_value_buff_used) { - token.str = str_view {m_value_buffer.begin(), m_value_buffer.end()}; - } - else { - token.str = str_view {m_token_begin_itr, m_cur_itr}; - if (token.type != lexical_token_t::PLAIN_SCALAR) { - // If extract_string_token() didn't use m_value_buffer to store mutated scalar value, m_cur_itr is at - // the last quotation mark, which will cause infinite loops from the next get_next_token() call. - ++m_cur_itr; + /// @brief Determines the range of single quoted scalar by scanning remaining input buffer contents. + /// @param token Storage for the range of single quoted scalar. + void determine_single_quoted_scalar_range(str_view& token) { + str_view sv {m_token_begin_itr, m_end_itr}; + + std::size_t pos = sv.find('\''); + while (pos != str_view::npos) { + FK_YAML_ASSERT(pos < sv.size()); + if FK_YAML_LIKELY (pos == sv.size() - 1 || sv[pos + 1] != '\'') { + // closing single quote is found. + token = {m_token_begin_itr, pos}; + m_cur_itr = sv.begin() + (pos + 1); + return; } - } - } - /// @brief Check if the given character is allowed in a single-quoted scalar token. - /// @param c The character to be checked. - /// @param is_value_buffer_used true is assigned when mutated scalar contents is written into m_value_buffer. - /// @return true if the given character is allowed, false otherwise. - bool is_allowed_single(char c, bool& is_value_buffer_used) { - switch (c) { - case '\n': { - is_value_buffer_used = true; + // If single quotation marks are repeated twice in a single quoted scalar, they are considered as an + // escaped single quotation mark. Skip the second one which would otherwise be detected as a closing + // single quotation mark in the next loop. + pos = sv.find('\'', pos + 2); + } - // discard trailing white spaces which preceeds the line break in the current line. - auto before_trailing_spaces_itr = m_cur_itr - 1; - bool ends_loop = false; - while (before_trailing_spaces_itr != m_token_begin_itr) { - switch (*before_trailing_spaces_itr) { - case ' ': - case '\t': - --before_trailing_spaces_itr; - break; - default: - ends_loop = true; - break; - } + m_cur_itr = m_end_itr; // update for error information + emit_error("Invalid end of input buffer in a single-quoted scalar token."); + } - if (ends_loop) { - break; - } + /// @brief Determines the range of double quoted scalar by scanning remaining input buffer contents. + /// @param token Storage for the range of double quoted scalar. + void determine_double_quoted_scalar_range(str_view& token) { + str_view sv {m_token_begin_itr, m_end_itr}; + + std::size_t pos = sv.find('\"'); + while (pos != str_view::npos) { + FK_YAML_ASSERT(pos < sv.size()); + + bool is_closed = true; + if FK_YAML_LIKELY (pos > 0) { + // Double quotation marks can be escaped by a preceding backslash and the number of backslashes matters + // to determine if the found double quotation mark is escaped since the backslash itself can also be + // escaped: + // * odd number of backslashes -> double quotation mark IS escaped (e.g., "\\\"") + // * even number of backslashes -> double quotation mark IS NOT escaped (e.g., "\\"") + uint32_t backslash_counts = 0; + const char* p = m_token_begin_itr + (pos - 1); + do { + if (*p-- != '\\') { + break; + } + ++backslash_counts; + } while (p != m_token_begin_itr); + is_closed = ((backslash_counts & 1u) == 0); // true: even, false: odd } - m_value_buffer.append(m_token_begin_itr, before_trailing_spaces_itr + 1); - - // move to the beginning of the next line. - ++m_cur_itr; - // apply line folding according to the number of following empty lines. - m_pos_tracker.update_position(m_cur_itr); - uint32_t line_after_line_break = m_pos_tracker.get_lines_read(); - skip_white_spaces_and_newline_codes(); - m_pos_tracker.update_position(m_cur_itr); - uint32_t trailing_empty_lines = m_pos_tracker.get_lines_read() - line_after_line_break; - if (trailing_empty_lines > 0) { - m_value_buffer.append(trailing_empty_lines, '\n'); - } - else { - m_value_buffer.push_back(' '); + if (is_closed) { + // closing double quote is found. + token = {m_token_begin_itr, pos}; + m_cur_itr = sv.begin() + (pos + 1); + return; } - m_token_begin_itr = (m_cur_itr == m_end_itr || *m_cur_itr == '\'') ? m_cur_itr-- : m_cur_itr; - return true; + pos = sv.find('\"', pos + 1); } - case '\'': - if (m_cur_itr + 1 == m_end_itr) { - if (is_value_buffer_used) { - m_value_buffer.append(m_token_begin_itr, m_cur_itr++); - m_token_begin_itr = m_cur_itr; - } - return false; - } - - if (*(m_cur_itr + 1) != '\'') { - if (is_value_buffer_used) { - m_value_buffer.append(m_token_begin_itr, m_cur_itr++); - } - return false; - } - - // If single quotation marks are repeated twice in a single-quoted string token, - // they are considered as an escaped single quotation mark. - is_value_buffer_used = true; + m_cur_itr = m_end_itr; // update for error information + emit_error("Invalid end of input buffer in a double-quoted scalar token."); + } - m_value_buffer.append(m_token_begin_itr, ++m_cur_itr); - m_token_begin_itr = m_cur_itr + 1; - return true; + /// @brief Determines the range of plain scalar by scanning remaining input buffer contents. + /// @param token Storage for the range of plain scalar. + void determine_plain_scalar_range(str_view& token) { + str_view sv {m_token_begin_itr, m_end_itr}; - default: // LCOV_EXCL_LINE - return true; // LCOV_EXCL_LINE + constexpr str_view filter = "\n :{}[],"; + std::size_t pos = sv.find_first_of(filter); + if FK_YAML_UNLIKELY (pos == str_view::npos) { + token = sv; + m_cur_itr = m_end_itr; + return; } - } - /// @brief Check if the given character is allowed in a double-quoted scalar token. - /// @param c The character to be checked. - /// @param is_value_buffer_used true is assigned when mutated scalar contents is written into m_value_buffer. - /// @return true if the given character is allowed, false otherwise. - bool is_allowed_double(char c, bool& is_value_buffer_used) { - switch (c) { - case '\n': { - is_value_buffer_used = true; + bool ends_loop = false; + do { + FK_YAML_ASSERT(pos < sv.size()); + switch (sv[pos]) { + case '\n': + ends_loop = true; + break; + case ' ': + if FK_YAML_UNLIKELY (pos == sv.size() - 1) { + // trim trailing space. + ends_loop = true; + break; + } - // discard trailing white spaces which preceeds the line break in the current line. - auto before_trailing_spaces_itr = m_cur_itr - 1; - bool ends_loop = false; - while (before_trailing_spaces_itr != m_token_begin_itr) { - switch (*before_trailing_spaces_itr) { + // Allow a space in a plain scalar only if the space is surrounded by non-space characters, but not + // followed by the comment prefix " #". + // Also, flow indicators are not allowed to be followed after a space in a flow context. + // See https://yaml.org/spec/1.2.2/#733-plain-style for more details. + switch (sv[pos + 1]) { case ' ': case '\t': - --before_trailing_spaces_itr; - break; - default: + case '\n': + case '#': ends_loop = true; break; - } - - if (ends_loop) { + case ':': + // " :" is permitted in a plain style string token, but not when followed by a space. + ends_loop = (pos < sv.size() - 2) && (sv[pos + 2] == ' '); + break; + case '{': + case '}': + case '[': + case ']': + case ',': + ends_loop = (m_state & flow_context_bit); + break; + default: break; } - } - m_value_buffer.append(m_token_begin_itr, before_trailing_spaces_itr + 1); - - // move to the beginning of the next line. - ++m_cur_itr; - - // apply line folding according to the number of following empty lines. - m_pos_tracker.update_position(m_cur_itr); - uint32_t line_after_line_break = m_pos_tracker.get_lines_read(); - skip_white_spaces_and_newline_codes(); - m_pos_tracker.update_position(m_cur_itr); - uint32_t trailing_empty_lines = m_pos_tracker.get_lines_read() - line_after_line_break; - if (trailing_empty_lines > 0) { - m_value_buffer.append(trailing_empty_lines, '\n'); - } - else { - m_value_buffer.push_back(' '); - } - - m_token_begin_itr = (m_cur_itr == m_end_itr || *m_cur_itr == '\"') ? m_cur_itr-- : m_cur_itr; - return true; - } - - case '\"': - if (is_value_buffer_used) { - m_value_buffer.append(m_token_begin_itr, m_cur_itr++); - } - return false; - - case '\\': - is_value_buffer_used = true; - - m_value_buffer.append(m_token_begin_itr, m_cur_itr); - - // Handle escaped characters. - // See https://yaml.org/spec/1.2.2/#57-escaped-characters for more details. - - c = *(m_cur_itr + 1); - if (c != '\n') { - bool is_valid_escaping = yaml_escaper::unescape(m_cur_itr, m_end_itr, m_value_buffer); - if FK_YAML_UNLIKELY (!is_valid_escaping) { - emit_error("Unsupported escape sequence is found in a string token."); - } - - m_token_begin_itr = m_cur_itr + 1; - return true; - } - - // move until the next non-space character is found. - m_cur_itr += 2; - skip_white_spaces(); - - m_token_begin_itr = (m_cur_itr == m_end_itr || *m_cur_itr == '\"') ? m_cur_itr-- : m_cur_itr; - return true; - - default: // LCOV_EXCL_LINE - return true; // LCOV_EXCL_LINE - } - } - - /// @brief Check if the given character is allowed in a plain scalar token outside a flow context. - /// @param c The character to be checked. - /// @return true if the given character is allowed, false otherwise. - bool is_allowed_plain(char c, bool& /*unused*/) { - switch (c) { - case '\n': - return false; - - case ' ': { - // Allow a space in a plain scalar only if the space is surrounded by non-space characters. - // See https://yaml.org/spec/1.2.2/#733-plain-style for more details. - - switch (*(m_cur_itr + 1)) { - case ':': { - // " :" is permitted in a plain style string token, but not when followed by a space. - char peeked = *(m_cur_itr + 2); - if (peeked == ' ') { - return false; + break; + case ':': + if FK_YAML_LIKELY (pos + 1 < sv.size()) { + switch (sv[pos + 1]) { + case ' ': + case '\t': + case '\n': + ends_loop = true; + break; + default: + break; + } } - return true; - } - case ' ': - case '\n': - case '#': - case '\\': - return false; - } - - return true; - } - - case ':': { - // A colon as a key separator must be followed by - // * a white space or - // * a newline code. - switch (*(m_cur_itr + 1)) { - case ' ': - case '\t': - case '\n': - return false; - } - return true; - } - - default: // LCOV_EXCL_LINE - return true; // LCOV_EXCL_LINE - } - } - - /// @brief Check if the given character is allowed in a plain scalar token inside a flow context. - /// @param c The character to be checked. - /// @return true if the given character is allowed, false otherwise. - bool is_allowed_plain_flow(char c, bool& /*unused*/) { - switch (c) { - case '\n': - return false; - - case ' ': { - // Allow a space in an unquoted string only if the space is surrounded by non-space characters. - // See https://yaml.org/spec/1.2.2/#733-plain-style for more details. - char next = *(m_cur_itr + 1); - - // These characters are permitted when not inside a flow collection, and not inside an implicit key. - // TODO: Support detection of implicit key context for this check. - switch (next) { + break; case '{': case '}': case '[': case ']': case ',': - return false; - } - - // " :" is permitted in a plain style string token, but not when followed by a space. - if (next == ':') { - char peeked = *(m_cur_itr + 2); - if (peeked == ' ') { - return false; - } - } - - switch (next) { - case ' ': - case '\n': - case '#': - case '\\': - return false; - } - - return true; - } - - case ':': { - char next = *(m_cur_itr + 1); - - // A colon as a key separator must be followed by - // * a white space or - // * a newline code. - switch (next) { - case ' ': - case '\t': - case '\n': - return false; + // This check is enabled only in a flow context. + ends_loop = (m_state & flow_context_bit); + break; + default: // LCOV_EXCL_LINE + break; // LCOV_EXCL_LINE } - return true; - } - - case '{': - case '}': - case '[': - case ']': - case ',': - return false; - - default: // LCOV_EXCL_LINE - return true; // LCOV_EXCL_LINE - } - } - - /// @brief Extracts a string token, either plain, single-quoted or double-quoted, from the input buffer. - /// @return true if mutated scalar contents is stored in m_value_buffer, false otherwise. - bool extract_string_token(bool needs_last_single_quote, bool needs_last_double_quote) { - // change behaviors depending on the type of a comming string scalar token. - // * single quoted - // * double quoted - // * plain - std::string check_filters {"\n"}; - bool (lexical_analyzer::*pfn_is_allowed)(char, bool&) = nullptr; - - if (needs_last_single_quote) { - check_filters.append("\'"); - pfn_is_allowed = &lexical_analyzer::is_allowed_single; - } - else if (needs_last_double_quote) { - check_filters.append("\"\\"); - pfn_is_allowed = &lexical_analyzer::is_allowed_double; - } - else if (m_flow_context_depth == 0) { - // plain scalar outside flow contexts - check_filters.append(" :"); - pfn_is_allowed = &lexical_analyzer::is_allowed_plain; - } - else { - // plain scalar inside flow contexts - check_filters.append(" :{}[],"); - pfn_is_allowed = &lexical_analyzer::is_allowed_plain_flow; - } - - // scan the contents of a string scalar token. - - bool is_value_buffer_used = false; - for (; m_cur_itr != m_end_itr; ++m_cur_itr) { - char current = *m_cur_itr; - uint32_t num_bytes = utf8::get_num_bytes(static_cast(current)); - if FK_YAML_LIKELY (num_bytes == 1) { - auto ret = check_filters.find(current); - if (ret != std::string::npos) { - bool is_allowed = (this->*pfn_is_allowed)(current, is_value_buffer_used); - if (!is_allowed) { - return is_value_buffer_used; - } - - continue; - } - - // Handle unescaped control characters. - if FK_YAML_UNLIKELY (static_cast(current) <= 0x1F) { - handle_unescaped_control_char(current); - continue; - } - - continue; + if (ends_loop) { + break; } - // Multi-byte characters are already validated while creating an input handler. - // So just advance the iterator. - m_cur_itr += num_bytes - 1; - } - - // Handle the end of input buffer. - - if FK_YAML_UNLIKELY (needs_last_double_quote) { - emit_error("Invalid end of input buffer in a double-quoted string token."); - } - - if FK_YAML_UNLIKELY (needs_last_single_quote) { - emit_error("Invalid end of input buffer in a single-quoted string token."); - } + pos = sv.find_first_of(filter, pos + 1); + } while (pos != str_view::npos); - return is_value_buffer_used; + token = sv.substr(0, pos); + m_cur_itr = token.end(); } /// @brief Scan a block style string token either in the literal or folded style. /// @param style The style of the given token, either literal or folded. /// @param chomp The chomping indicator type of the given token, either strip, keep or clip. /// @param indent The indent size specified for the given token. - void scan_block_style_string_token(block_style_indicator_t style, chomping_indicator_t chomp, uint32_t indent) { - m_value_buffer.clear(); + void scan_block_style_string_token(uint32_t& indent, str_view& token) { + str_view sv {m_token_begin_itr, m_end_itr}; // Handle leading all-space lines. - for (char current = 0; m_cur_itr != m_end_itr; ++m_cur_itr) { - current = *m_cur_itr; + constexpr str_view space_filter = " \t\n"; + std::size_t first_non_space_pos = sv.find_first_not_of(space_filter); + if (first_non_space_pos == str_view::npos) { + // empty block scalar with no subsequent tokens. + indent = static_cast(sv.size()); + token = sv; + + // Without the following iterator update, lexer cannot reach the end of input buffer and causes infinite + // loops from the next loop. (https://github.com/fktn-k/fkYAML/pull/410) + m_cur_itr = m_end_itr; + return; + } - if (current == ' ') { - continue; + // get indentation of the first non-space character. + std::size_t last_newline_pos = sv.substr(0, first_non_space_pos).find_last_of('\n'); + if (last_newline_pos == str_view::npos) { + // first_non_space_pos in on the first line. + uint32_t cur_indent = static_cast(first_non_space_pos); + if (indent == 0) { + indent = cur_indent; } - - if (current == '\n') { - m_value_buffer.push_back('\n'); - continue; + else if FK_YAML_UNLIKELY (cur_indent < indent) { + emit_error("A block style scalar is less indented than the indicated level."); } - break; + last_newline_pos = 0; } + else { + FK_YAML_ASSERT(last_newline_pos < first_non_space_pos); + uint32_t cur_indent = static_cast(first_non_space_pos - last_newline_pos - 1); - if (m_cur_itr == m_end_itr) { - if (chomp != chomping_indicator_t::KEEP) { - m_value_buffer.clear(); + // TODO: preserve and compare the last indentation with `cur_indent` + if (indent == 0) { + indent = cur_indent; + } + else if FK_YAML_UNLIKELY (cur_indent < indent) { + emit_error("A block style scalar is less indented than the indicated level."); } - return; } - m_pos_tracker.update_position(m_cur_itr); - uint32_t cur_indent = m_pos_tracker.get_cur_pos_in_line(); - - // TODO: preserve and compare the last indentation with `cur_indent` - if (indent == 0) { - indent = cur_indent; - } - else if FK_YAML_UNLIKELY (cur_indent < indent) { - emit_error("A block style scalar is less indented than the indicated level."); + last_newline_pos = sv.find('\n', first_non_space_pos + 1); + if (last_newline_pos == str_view::npos) { + last_newline_pos = sv.size(); } - uint32_t chars_in_line = 0; - bool is_extra_indented = false; - m_token_begin_itr = m_cur_itr; - if (cur_indent > indent) { - if (style == block_style_indicator_t::FOLDED) { - m_value_buffer.push_back('\n'); - is_extra_indented = true; + while (last_newline_pos < sv.size()) { + std::size_t cur_line_end_pos = sv.find('\n', last_newline_pos + 1); + if (cur_line_end_pos == str_view::npos) { + cur_line_end_pos = sv.size(); } - uint32_t diff = cur_indent - indent; - m_token_begin_itr -= diff; - chars_in_line = diff; - } - - for (; m_cur_itr != m_end_itr; ++m_cur_itr) { - char current = *m_cur_itr; - if (current == '\n') { - if (style == block_style_indicator_t::LITERAL) { - if (chars_in_line == 0) { - m_value_buffer.push_back('\n'); - } - else { - m_value_buffer.append(m_token_begin_itr, m_cur_itr + 1); - } - } - // block_style_indicator_t::FOLDED - else if (chars_in_line == 0) { - // Just append a newline if the current line is empty. - m_value_buffer.push_back('\n'); - } - else if (is_extra_indented) { - // A line being more indented is not folded. - m_value_buffer.append(m_token_begin_itr, m_cur_itr + 1); - } - else { - m_value_buffer.append(m_token_begin_itr, m_cur_itr); - - // Append a newline if the next line is empty. - bool is_end_of_token = false; - bool is_next_empty = false; - for (uint32_t i = 0; i < indent; i++) { - if (++m_cur_itr == m_end_itr) { - is_end_of_token = true; - break; - } - - char c = *m_cur_itr; - if (c == ' ') { - continue; - } - - if (c == '\n') { - is_next_empty = true; - break; - } - - is_end_of_token = true; - break; - } - - if (is_end_of_token) { - m_value_buffer.push_back('\n'); - chars_in_line = 0; - break; - } - - if (is_next_empty) { - m_value_buffer.push_back('\n'); - chars_in_line = 0; - continue; - } - - switch (char next = *(m_cur_itr + 1)) { - case '\n': - ++m_cur_itr; - m_value_buffer.push_back(next); - break; - case ' ': - // The next line is more indented, so a newline will be appended in the coming loops. - break; - default: - m_value_buffer.push_back(' '); - break; - } - } - - // Reset the values for the next line. - m_token_begin_itr = m_cur_itr + 1; - chars_in_line = 0; - is_extra_indented = false; - + std::size_t cur_line_content_begin_pos = sv.find_first_not_of(' ', last_newline_pos + 1); + if (cur_line_content_begin_pos == str_view::npos) { + last_newline_pos = cur_line_end_pos; continue; } - // Handle indentation - if (chars_in_line == 0) { - m_pos_tracker.update_position(m_cur_itr); - cur_indent = m_pos_tracker.get_cur_pos_in_line(); - if (cur_indent < indent) { - if (current != ' ') { - // Interpret less indented non-space characters as the start of the next token. - break; - } - // skip a space if not yet indented enough - continue; - } - - if (current == ' ' && style == block_style_indicator_t::FOLDED) { - // A line being more indented is not folded. - m_value_buffer.push_back('\n'); - is_extra_indented = true; - } - m_token_begin_itr = m_cur_itr; + FK_YAML_ASSERT(last_newline_pos < cur_line_content_begin_pos); + uint32_t cur_indent = static_cast(cur_line_content_begin_pos - last_newline_pos - 1); + if (cur_indent < indent && sv[cur_line_content_begin_pos] != '\n') { + // Interpret less indented non-space characters as the start of the next token. + break; } - ++chars_in_line; + last_newline_pos = cur_line_end_pos; } - if (chars_in_line > 0) { - m_value_buffer.append(m_token_begin_itr, m_cur_itr); + // include last newline character if not all characters have been consumed yet. + if (last_newline_pos < sv.size()) { + ++last_newline_pos; } - // Manipulate the trailing line endings chomping indicator type. - switch (chomp) { - case chomping_indicator_t::STRIP: - while (!m_value_buffer.empty()) { - // Empty strings are handled above, so no check for the case. - char last = m_value_buffer.back(); - if (last != '\n') { - break; - } - m_value_buffer.pop_back(); - } - break; - case chomping_indicator_t::CLIP: { - char last = m_value_buffer.back(); - if (last != '\n') { - // No need to chomp the trailing newlines. - break; - } - uint32_t buf_size = static_cast(m_value_buffer.size()); - while (buf_size > 1) { - // Strings with only newlines are handled above, so no check for the case. - char second_last = m_value_buffer[buf_size - 2]; - if (second_last != '\n') { - break; - } - m_value_buffer.pop_back(); - --buf_size; - } - break; - } - case chomping_indicator_t::KEEP: - break; - } + token = sv.substr(0, last_newline_pos); + m_cur_itr = token.end(); } /// @brief Handle unescaped control characters. /// @param c A target character. - void handle_unescaped_control_char(char c) { + void handle_unescaped_control_char(char c) const { FK_YAML_ASSERT(0x00 <= c && c <= 0x1F); switch (c) { @@ -1276,26 +950,45 @@ class lexical_analyzer { } } + /// @brief Checks if the given scalar contains no unescaped control characters. + /// @param scalar Scalar contents. + void check_scalar_content(str_view scalar) const { + for (auto c : scalar) { + if (0 <= c && c < 0x20) { + handle_unescaped_control_char(c); + } + } + } + /// @brief Gets the metadata of a following block style string scalar. /// @param chomp_type A variable to store the retrieved chomping style type. /// @param indent A variable to store the retrieved indent size. - void get_block_style_metadata(chomping_indicator_t& chomp_type, uint32_t& indent) { - chomp_type = chomping_indicator_t::CLIP; - indent = 0; + /// @return Block scalar header information converted from the header line. + block_scalar_header convert_to_block_scalar_header(str_view& line) { + constexpr str_view comment_prefix = " #"; + std::size_t comment_begin_pos = line.find(comment_prefix); + if (comment_begin_pos != str_view::npos) { + line = line.substr(0, comment_begin_pos); + } - while (m_cur_itr != m_end_itr) { - switch (*m_cur_itr) { + if (line.empty()) { + return {}; + } + + block_scalar_header header {}; + for (const char c : line) { + switch (c) { case '-': - if FK_YAML_UNLIKELY (chomp_type != chomping_indicator_t::CLIP) { + if FK_YAML_UNLIKELY (header.chomp != chomping_indicator_t::CLIP) { emit_error("Too many block chomping indicators specified."); } - chomp_type = chomping_indicator_t::STRIP; + header.chomp = chomping_indicator_t::STRIP; break; case '+': - if FK_YAML_UNLIKELY (chomp_type != chomping_indicator_t::CLIP) { + if FK_YAML_UNLIKELY (header.chomp != chomping_indicator_t::CLIP) { emit_error("Too many block chomping indicators specified."); } - chomp_type = chomping_indicator_t::KEEP; + header.chomp = chomping_indicator_t::KEEP; break; case '0': emit_error("An indentation level for a block scalar cannot be 0."); @@ -1308,26 +1001,20 @@ class lexical_analyzer { case '7': case '8': case '9': - if FK_YAML_UNLIKELY (indent > 0) { + if FK_YAML_UNLIKELY (header.indent > 0) { emit_error("Invalid indentation level for a block scalar. It must be between 1 and 9."); } - indent = static_cast(*m_cur_itr - '0'); + header.indent = static_cast(c - '0'); break; case ' ': case '\t': break; - case '\n': - ++m_cur_itr; - return; - case '#': - skip_until_line_end(); - return; default: emit_error("Invalid character found in a block scalar header."); } - - ++m_cur_itr; } + + return header; } /// @brief Skip white spaces (half-width spaces and tabs) from the current position. @@ -1383,22 +1070,22 @@ class lexical_analyzer { const char* m_end_itr {}; /// The current position tracker of the input buffer. mutable position_tracker m_pos_tracker {}; - /// A temporal buffer to store a string to be parsed to an actual token value. - std::string m_value_buffer {}; /// The last yaml version. str_view m_yaml_version {}; /// The last tag handle. str_view m_tag_handle {}; /// The last tag prefix. str_view m_tag_prefix {}; + /// The last block scalar header. + block_scalar_header m_block_scalar_header {}; /// The beginning position of the last lexical token. (zero origin) uint32_t m_last_token_begin_pos {0}; /// The beginning line of the last lexical token. (zero origin) uint32_t m_last_token_begin_line {0}; /// The current depth of flow context. - uint32_t m_flow_context_depth {0}; + uint32_t m_state {0}; }; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_INPUT_LEXICAL_ANALIZER_HPP_ */ +#endif /* FK_YAML_DETAIL_INPUT_LEXICAL_ANALYZER_HPP */ diff --git a/include/fkYAML/detail/input/position_tracker.hpp b/include/fkYAML/detail/input/position_tracker.hpp index 0f8f5ae8..11fcbb07 100644 --- a/include/fkYAML/detail/input/position_tracker.hpp +++ b/include/fkYAML/detail/input/position_tracker.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -#ifndef FK_YAML_DETAIL_INPUT_POSITION_TRACKER_HPP_ -#define FK_YAML_DETAIL_INPUT_POSITION_TRACKER_HPP_ +#ifndef FK_YAML_DETAIL_INPUT_POSITION_TRACKER_HPP +#define FK_YAML_DETAIL_INPUT_POSITION_TRACKER_HPP #include @@ -26,7 +24,7 @@ class position_tracker { m_end = buffer.end(); } - /// @brief Update the set of the current position informations. + /// @brief Update the set of the current position information. /// @note This function doesn't support cases where cur_pos has moved backward from the last call. /// @param cur_pos The iterator to the current element of the buffer. void update_position(const char* p_current) { @@ -89,4 +87,4 @@ class position_tracker { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_INPUT_POSITION_TRACKER_HPP_ */ +#endif /* FK_YAML_DETAIL_INPUT_POSITION_TRACKER_HPP */ diff --git a/include/fkYAML/detail/input/scalar_parser.hpp b/include/fkYAML/detail/input/scalar_parser.hpp new file mode 100644 index 00000000..99d7c01c --- /dev/null +++ b/include/fkYAML/detail/input/scalar_parser.hpp @@ -0,0 +1,543 @@ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_INPUT_SCALAR_PARSER_HPP +#define FK_YAML_DETAIL_INPUT_SCALAR_PARSER_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +FK_YAML_DETAIL_NAMESPACE_BEGIN + +/// @brief A parser for YAML scalars. +/// @tparam BasicNodeType A type of the container for parsed YAML scalars. +template +class scalar_parser { + static_assert(is_basic_node::value, "scalar_parser only accepts basic_node<...>"); + +public: + using basic_node_type = BasicNodeType; + +private: + /** A type for boolean node values. */ + using boolean_type = typename basic_node_type::boolean_type; + /** A type for integer node values. */ + using integer_type = typename basic_node_type::integer_type; + /** A type for floating point node values. */ + using float_number_type = typename basic_node_type::float_number_type; + /** A type for string node values. */ + using string_type = typename basic_node_type::string_type; + +public: + /// @brief Constructs a new scalar_parser object. + /// @param line Current line. + /// @param indent Current indentation. + scalar_parser(uint32_t line, uint32_t indent) noexcept + : m_line(line), + m_indent(indent) { + } + + /// @brief Destroys a scalar_parser object. + ~scalar_parser() noexcept = default; + + // std::string's copy constructor/assignment operator may throw a exception. + scalar_parser(const scalar_parser&) = default; + scalar_parser& operator=(const scalar_parser&) = default; + + scalar_parser(scalar_parser&&) noexcept = default; + scalar_parser& operator=(scalar_parser&&) noexcept = default; + + /// @brief Parses a token into a flow scalar (either plain, single quoted or double quoted) + /// @param lex_type Lexical token type for the scalar. + /// @param tag_type Tag type for the scalar. + /// @param token Scalar contents. + /// @return Parsed YAML flow scalar object. + basic_node_type parse_flow(lexical_token_t lex_type, tag_t tag_type, str_view token) { + FK_YAML_ASSERT( + lex_type == lexical_token_t::PLAIN_SCALAR || lex_type == lexical_token_t::SINGLE_QUOTED_SCALAR || + lex_type == lexical_token_t::DOUBLE_QUOTED_SCALAR); + FK_YAML_ASSERT(tag_type != tag_t::SEQUENCE && tag_type != tag_t::MAPPING); + + token = parse_flow_scalar_token(lex_type, token); + node_type value_type = decide_value_type(lex_type, tag_type, token); + return create_scalar_node(value_type, token); + } + + /// @brief Parses a token into a block scalar (either literal or folded) + /// @param lex_type Lexical token type for the scalar. + /// @param tag_type Tag type for the scalar. + /// @param token Scalar contents. + /// @param header Block scalar header information. + /// @return Parsed YAML block scalar object. + basic_node_type parse_block( + lexical_token_t lex_type, tag_t tag_type, str_view token, const block_scalar_header& header) { + FK_YAML_ASSERT( + lex_type == lexical_token_t::BLOCK_LITERAL_SCALAR || lex_type == lexical_token_t::BLOCK_FOLDED_SCALAR); + FK_YAML_ASSERT(tag_type != tag_t::SEQUENCE && tag_type != tag_t::MAPPING); + + if (lex_type == lexical_token_t::BLOCK_LITERAL_SCALAR) { + token = parse_block_literal_scalar(token, header); + } + else { + token = parse_block_folded_scalar(token, header); + } + + node_type value_type = decide_value_type(lex_type, tag_type, token); + return create_scalar_node(value_type, token); + } + +private: + /// @brief Parses a token into a flow scalar contents. + /// @param lex_type Lexical token type for the scalar. + /// @param token Scalar contents. + /// @return View into the parsed scalar contents. + str_view parse_flow_scalar_token(lexical_token_t lex_type, str_view token) { + switch (lex_type) { + case lexical_token_t::SINGLE_QUOTED_SCALAR: + token = parse_single_quoted_scalar(token); + break; + case lexical_token_t::DOUBLE_QUOTED_SCALAR: + token = parse_double_quoted_scalar(token); + break; + case lexical_token_t::PLAIN_SCALAR: + default: + break; + } + + return token; + } + + /// @brief Parses single quoted scalar contents. + /// @param token Scalar contents. + /// @return View into the parsed scalar contents. + str_view parse_single_quoted_scalar(str_view token) noexcept { + if (token.empty()) { + return token; + } + + constexpr str_view filter = "\'\n"; + std::size_t pos = token.find_first_of(filter); + if (pos == str_view::npos) { + return token; + } + + m_use_owned_buffer = true; + + if (m_buffer.capacity() < token.size()) { + m_buffer.reserve(token.size()); + } + + do { + FK_YAML_ASSERT(pos < token.size()); + FK_YAML_ASSERT(token[pos] == '\'' || token[pos] == '\n'); + + if (token[pos] == '\'') { + // unescape escaped single quote. ('' -> ') + FK_YAML_ASSERT(pos + 1 < token.size()); + m_buffer.append(token.begin(), token.begin() + (pos + 1)); + token.remove_prefix(pos + 2); // move next to the escaped single quote. + } + else { + process_line_folding(token, pos); + } + + pos = token.find_first_of(filter); + } while (pos != str_view::npos); + + if (!token.empty()) { + m_buffer.append(token.begin(), token.size()); + } + + return {m_buffer}; + } + + /// @brief Parses double quoted scalar contents. + /// @param token Scalar contents. + /// @return View into the parsed scalar contents. + str_view parse_double_quoted_scalar(str_view token) { + if (token.empty()) { + return token; + } + + constexpr str_view filter = "\\\n"; + std::size_t pos = token.find_first_of(filter); + if (pos == str_view::npos) { + return token; + } + + m_use_owned_buffer = true; + + if (m_buffer.capacity() < token.size()) { + m_buffer.reserve(token.size()); + } + + do { + FK_YAML_ASSERT(pos < token.size()); + FK_YAML_ASSERT(token[pos] == '\\' || token[pos] == '\n'); + + if (token[pos] == '\\') { + FK_YAML_ASSERT(pos + 1 < token.size()); + m_buffer.append(token.begin(), token.begin() + pos); + + if (token[pos + 1] != '\n') { + token.remove_prefix(pos); + const char* p_escape_begin = token.begin(); + bool is_valid_escaping = yaml_escaper::unescape(p_escape_begin, token.end(), m_buffer); + if FK_YAML_UNLIKELY (!is_valid_escaping) { + throw parse_error( + "Unsupported escape sequence is found in a double quoted scalar.", m_line, m_indent); + } + + // `p_escape_begin` points to the last element of the escape sequence. + token.remove_prefix((p_escape_begin - token.begin()) + 1); + } + else { + std::size_t non_space_pos = token.find_first_not_of(" \t", pos + 2); + if (non_space_pos == str_view::npos) { + non_space_pos = token.size(); + } + token.remove_prefix(non_space_pos); + } + } + else { + process_line_folding(token, pos); + } + + pos = token.find_first_of(filter); + } while (pos != str_view::npos); + + if (!token.empty()) { + m_buffer.append(token.begin(), token.size()); + } + + return {m_buffer}; + } + + /// @brief Parses block literal scalar contents. + /// @param token Scalar contents. + /// @param header Block scalar header information. + /// @return View into the parsed scalar contents. + str_view parse_block_literal_scalar(str_view token, const block_scalar_header& header) { + if FK_YAML_UNLIKELY (token.empty()) { + return token; + } + + m_use_owned_buffer = true; + m_buffer.reserve(token.size()); + + std::size_t cur_line_begin_pos = 0; + do { + bool has_newline_at_end = true; + std::size_t cur_line_end_pos = token.find('\n', cur_line_begin_pos); + if (cur_line_end_pos == str_view::npos) { + has_newline_at_end = false; + cur_line_end_pos = token.size(); + } + + std::size_t line_size = cur_line_end_pos - cur_line_begin_pos; + str_view line = token.substr(cur_line_begin_pos, line_size); + + if (line.size() > header.indent) { + m_buffer.append(line.begin() + header.indent, line.end()); + } + + if (!has_newline_at_end) { + break; + } + + m_buffer.push_back('\n'); + cur_line_begin_pos = cur_line_end_pos + 1; + } while (cur_line_begin_pos < token.size()); + + process_chomping(header.chomp); + + return {m_buffer}; + } + + /// @brief Parses block folded scalar contents. + /// @param token Scalar contents. + /// @param header Block scalar header information. + /// @return View into the parsed scalar contents. + str_view parse_block_folded_scalar(str_view token, const block_scalar_header& header) { + if FK_YAML_UNLIKELY (token.empty()) { + return token; + } + + m_use_owned_buffer = true; + m_buffer.reserve(token.size()); + + std::size_t cur_line_begin_pos = 0; + bool has_newline_at_end = true; + bool can_be_folded = false; + do { + std::size_t cur_line_end_pos = token.find('\n', cur_line_begin_pos); + if (cur_line_end_pos == str_view::npos) { + has_newline_at_end = false; + cur_line_end_pos = token.size(); + } + + std::size_t line_size = cur_line_end_pos - cur_line_begin_pos; + str_view line = token.substr(cur_line_begin_pos, line_size); + + if (line.size() <= header.indent) { + // empty or less-indented lines are turned into a newline + m_buffer.push_back('\n'); + can_be_folded = false; + } + else { + std::size_t non_space_pos = line.find_first_not_of(' '); + bool is_more_indented = (non_space_pos != str_view::npos) && (non_space_pos > header.indent); + + if (can_be_folded) { + if (is_more_indented) { + // The content line right before more-indented lines is not folded. + m_buffer.push_back('\n'); + } + else { + m_buffer.push_back(' '); + } + + can_be_folded = false; + } + + m_buffer.append(line.begin() + header.indent, line.end()); + + if (is_more_indented && has_newline_at_end) { + // more-indented lines are not folded. + m_buffer.push_back('\n'); + } + else { + can_be_folded = true; + } + } + + if (!has_newline_at_end) { + break; + } + + cur_line_begin_pos = cur_line_end_pos + 1; + } while (cur_line_begin_pos < token.size()); + + if (has_newline_at_end && can_be_folded) { + // The final content line break are not folded. + m_buffer.push_back('\n'); + } + + process_chomping(header.chomp); + + return {m_buffer}; + } + + /// @brief Discards final content line break and trailing empty lines depending on the given chomping type. + /// @param chomp Chomping method type. + void process_chomping(chomping_indicator_t chomp) { + switch (chomp) { + case chomping_indicator_t::STRIP: { + std::size_t content_end_pos = m_buffer.find_last_not_of('\n'); + if (content_end_pos == std::string::npos) { + // if the scalar has no content line, all lines are considered as trailing empty lines. + m_buffer.clear(); + break; + } + + if (content_end_pos == m_buffer.size() - 1) { + // no last content line break nor trailing empty lines. + break; + } + + // remove the last content line break and all trailing empty lines. + m_buffer.erase(content_end_pos + 1); + + break; + } + case chomping_indicator_t::CLIP: { + std::size_t content_end_pos = m_buffer.find_last_not_of('\n'); + if (content_end_pos == std::string::npos) { + // if the scalar has no content line, all lines are considered as trailing empty lines. + m_buffer.clear(); + break; + } + + if (content_end_pos == m_buffer.size() - 1) { + // no trailing empty lines + break; + } + + // remove all trailing empty lines. + m_buffer.erase(content_end_pos + 2); + + break; + } + case chomping_indicator_t::KEEP: + break; + } + } + + /// @brief Applies line folding to flow scalar contents. + /// @param token Flow scalar contents. + /// @param newline_pos Position of the target newline code. + void process_line_folding(str_view& token, std::size_t newline_pos) noexcept { + // discard trailing white spaces which precedes the line break in the current line. + std::size_t last_non_space_pos = token.substr(0, newline_pos + 1).find_last_not_of(" \t"); + if (last_non_space_pos == str_view::npos) { + m_buffer.append(token.begin(), newline_pos); + } + else { + m_buffer.append(token.begin(), last_non_space_pos + 1); + } + token.remove_prefix(newline_pos + 1); // move next to the LF + + uint32_t empty_line_counts = 0; + do { + std::size_t non_space_pos = token.find_first_not_of(" \t"); + if (non_space_pos == str_view::npos) { + // Line folding ignores trailing spaces. + token.remove_prefix(token.size()); + break; + } + else if (token[non_space_pos] != '\n') { + token.remove_prefix(non_space_pos); + break; + } + + token.remove_prefix(non_space_pos + 1); + ++empty_line_counts; + } while (true); + + if (empty_line_counts > 0) { + m_buffer.append(empty_line_counts, '\n'); + } + else { + m_buffer.push_back(' '); + } + } + + /// @brief Decides scalar value type based on the lexical/tag types and scalar contents. + /// @param lex_type Lexical token type for the scalar. + /// @param tag_type Tag type for the scalar. + /// @param token Scalar contents. + /// @return Scalar value type. + node_type decide_value_type(lexical_token_t lex_type, tag_t tag_type, str_view token) const noexcept { + node_type value_type {node_type::STRING}; + if (lex_type == lexical_token_t::PLAIN_SCALAR) { + value_type = scalar_scanner::scan(token.begin(), token.end()); + } + + switch (tag_type) { + case tag_t::NULL_VALUE: + value_type = node_type::NULL_OBJECT; + break; + case tag_t::BOOLEAN: + value_type = node_type::BOOLEAN; + break; + case tag_t::INTEGER: + value_type = node_type::INTEGER; + break; + case tag_t::FLOATING_NUMBER: + value_type = node_type::FLOAT; + break; + case tag_t::STRING: + value_type = node_type::STRING; + break; + case tag_t::NON_SPECIFIC: + // scalars with the non-specific tag is resolved to a string tag. + // See the "Non-Specific Tags" section in https://yaml.org/spec/1.2.2/#691-node-tags. + value_type = node_type::STRING; + break; + case tag_t::NONE: + case tag_t::CUSTOM_TAG: + default: + break; + } + + return value_type; + } + + /// @brief Creates YAML scalar object based on the value type and contents. + /// @param type Scalar value type. + /// @param token Scalar contents. + /// @return A YAML scalar object. + basic_node_type create_scalar_node(node_type type, str_view token) { + basic_node_type node {}; + + switch (type) { + case node_type::NULL_OBJECT: { + std::nullptr_t null = nullptr; + bool converted = detail::aton(token.begin(), token.end(), null); + if FK_YAML_UNLIKELY (!converted) { + throw parse_error("Failed to convert a scalar to a null.", m_line, m_indent); + } + // The above `node` variable is already null, so no instance creation is needed. + break; + } + case node_type::BOOLEAN: { + boolean_type boolean = static_cast(false); + bool converted = detail::atob(token.begin(), token.end(), boolean); + if FK_YAML_UNLIKELY (!converted) { + throw parse_error("Failed to convert a scalar to a boolean.", m_line, m_indent); + } + node = basic_node_type(boolean); + break; + } + case node_type::INTEGER: { + integer_type integer = 0; + bool converted = detail::atoi(token.begin(), token.end(), integer); + if FK_YAML_UNLIKELY (!converted) { + throw parse_error("Failed to convert a scalar to an integer.", m_line, m_indent); + } + node = basic_node_type(integer); + break; + } + case node_type::FLOAT: { + float_number_type float_val = 0; + bool converted = detail::atof(token.begin(), token.end(), float_val); + if FK_YAML_UNLIKELY (!converted) { + throw parse_error("Failed to convert a scalar to a floating point value", m_line, m_indent); + } + node = basic_node_type(float_val); + break; + } + case node_type::STRING: + if (m_use_owned_buffer) { + node = basic_node_type(std::move(m_buffer)); + m_use_owned_buffer = false; + } + else { + node = basic_node_type(std::string(token.begin(), token.end())); + } + break; + default: // LCOV_EXCL_LINE + break; // LCOV_EXCL_LINE + } + + return node; + } + + /// Current line + uint32_t m_line {0}; + /// Current indentation for the scalar + uint32_t m_indent {0}; + /// Whether the parsed contents are stored in an owned buffer. + bool m_use_owned_buffer {false}; + /// Owned buffer storage for parsing. This buffer is used when scalar contents need mutation. + std::string m_buffer {}; +}; + +FK_YAML_DETAIL_NAMESPACE_END + +#endif /* FK_YAML_DETAIL_INPUT_SCALAR_PARSER_HPP */ diff --git a/include/fkYAML/detail/input/scalar_scanner.hpp b/include/fkYAML/detail/input/scalar_scanner.hpp index a9d8aa31..4064b80f 100644 --- a/include/fkYAML/detail/input/scalar_scanner.hpp +++ b/include/fkYAML/detail/input/scalar_scanner.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_INPUT_SCALAR_SCANNER_HPP_ -#define FK_YAML_DETAIL_INPUT_SCALAR_SCANNER_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_INPUT_SCALAR_SCANNER_HPP +#define FK_YAML_DETAIL_INPUT_SCALAR_SCANNER_HPP #include #include @@ -47,7 +45,7 @@ class scalar_scanner { /// @param begin The iterator to the first element of the scalar. /// @param end The iterator to the past-the-end element of the scalar. /// @return A detected scalar value type. - static node_type scan(const char* begin, const char* end) { + static node_type scan(const char* begin, const char* end) noexcept { if (begin == end) { return node_type::STRING; } @@ -132,7 +130,7 @@ class scalar_scanner { /// @param itr The iterator to the first element of the scalar. /// @param len The length of the scalar contents. /// @return A detected scalar value type. - static node_type scan_possible_number_token(const char* itr, uint32_t len) { + static node_type scan_possible_number_token(const char* itr, uint32_t len) noexcept { FK_YAML_ASSERT(len > 0); switch (*itr) { @@ -161,7 +159,7 @@ class scalar_scanner { /// @param itr The iterator to the past-the-negative-sign element of the scalar. /// @param len The length of the scalar contents left unscanned. /// @return A detected scalar value type. - static node_type scan_negative_number(const char* itr, uint32_t len) { + static node_type scan_negative_number(const char* itr, uint32_t len) noexcept { FK_YAML_ASSERT(len > 0); if (is_digit(*itr)) { @@ -175,7 +173,7 @@ class scalar_scanner { /// @param itr The iterator to the past-the-zero element of the scalar. /// @param len The length of the scalar left unscanned. /// @return A detected scalar value type. - static node_type scan_after_zero_at_first(const char* itr, uint32_t len) { + static node_type scan_after_zero_at_first(const char* itr, uint32_t len) noexcept { FK_YAML_ASSERT(len > 0); if (is_digit(*itr)) { @@ -207,7 +205,7 @@ class scalar_scanner { /// @param len The length of the scalar left unscanned. /// @param has_decimal_point Whether a decimal point has already been found in the previous part. /// @return A detected scalar value type. - static node_type scan_decimal_number(const char* itr, uint32_t len, bool has_decimal_point) { + static node_type scan_decimal_number(const char* itr, uint32_t len, bool has_decimal_point) noexcept { FK_YAML_ASSERT(len > 0); if (is_digit(*itr)) { @@ -240,7 +238,7 @@ class scalar_scanner { /// @param len The length of the scalar left unscanned. /// @param has_decimal_point Whether the decimal point has already been found in the previous part. /// @return A detected scalar value type. - static node_type scan_after_decimal_point(const char* itr, uint32_t len, bool has_decimal_point) { + static node_type scan_after_decimal_point(const char* itr, uint32_t len, bool has_decimal_point) noexcept { FK_YAML_ASSERT(len > 0); if (is_digit(*itr)) { @@ -255,7 +253,7 @@ class scalar_scanner { /// @param len The length of the scalar left unscanned. /// @param has_decimal_point Whether the decimal point has already been found in the previous part. /// @return A detected scalar value type. - static node_type scan_after_exponent(const char* itr, uint32_t len, bool has_decimal_point) { + static node_type scan_after_exponent(const char* itr, uint32_t len, bool has_decimal_point) noexcept { FK_YAML_ASSERT(len > 0); if (is_digit(*itr)) { @@ -275,7 +273,7 @@ class scalar_scanner { /// @param itr The iterator to the octal-number element of the scalar. /// @param len The length of the scalar left unscanned. /// @return A detected scalar value type. - static node_type scan_octal_number(const char* itr, uint32_t len) { + static node_type scan_octal_number(const char* itr, uint32_t len) noexcept { FK_YAML_ASSERT(len > 0); switch (*itr) { @@ -297,7 +295,7 @@ class scalar_scanner { /// @param itr The iterator to the hexadecimal-number element of the scalar. /// @param len The length of the scalar left unscanned. /// @return A detected scalar value type. - static node_type scan_hexadecimal_number(const char* itr, uint32_t len) { + static node_type scan_hexadecimal_number(const char* itr, uint32_t len) noexcept { FK_YAML_ASSERT(len > 0); if (is_xdigit(*itr)) { @@ -309,4 +307,4 @@ class scalar_scanner { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_INPUT_SCALAR_SCANNER_HPP_ */ +#endif /* FK_YAML_DETAIL_INPUT_SCALAR_SCANNER_HPP */ diff --git a/include/fkYAML/detail/input/tag_resolver.hpp b/include/fkYAML/detail/input/tag_resolver.hpp index a590e6d1..389e914e 100644 --- a/include/fkYAML/detail/input/tag_resolver.hpp +++ b/include/fkYAML/detail/input/tag_resolver.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_INPUT_TAG_RESOLVER_HPP_ -#define FK_YAML_DETAIL_INPUT_TAG_RESOLVER_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_INPUT_TAG_RESOLVER_HPP +#define FK_YAML_DETAIL_INPUT_TAG_RESOLVER_HPP #include #include @@ -177,4 +175,4 @@ class tag_resolver { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_INPUT_TAG_RESOLVER_HPP_ */ +#endif /* FK_YAML_DETAIL_INPUT_TAG_RESOLVER_HPP */ diff --git a/include/fkYAML/detail/input/tag_t.hpp b/include/fkYAML/detail/input/tag_t.hpp index 8277405c..227a92f7 100644 --- a/include/fkYAML/detail/input/tag_t.hpp +++ b/include/fkYAML/detail/input/tag_t.hpp @@ -1,24 +1,23 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -#ifndef FK_YAML_DETAIL_INPUT_TAG_T_HPP_ -#define FK_YAML_DETAIL_INPUT_TAG_T_HPP_ +#ifndef FK_YAML_DETAIL_INPUT_TAG_T_HPP +#define FK_YAML_DETAIL_INPUT_TAG_T_HPP #include FK_YAML_DETAIL_NAMESPACE_BEGIN -/// @brief Definition of YAML directive sets. +/// @brief Definition of YAML tag types. enum class tag_t { - NON_SPECIFIC, //!< Represents a non-specific tag. - CUSTOM_TAG, //!< Represents a cumstom tag + NONE, //!< Represents a non-specific tag "?". + NON_SPECIFIC, //!< Represents a non-specific tag "!". + CUSTOM_TAG, //!< Represents a custom tag SEQUENCE, //!< Represents a sequence tag. MAPPING, //!< Represents a mapping tag. NULL_VALUE, //!< Represents a null value tag. @@ -30,4 +29,4 @@ enum class tag_t { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_INPUT_TAG_T_HPP_ */ +#endif /* FK_YAML_DETAIL_INPUT_TAG_T_HPP */ diff --git a/include/fkYAML/detail/iterator.hpp b/include/fkYAML/detail/iterator.hpp index 9e575345..2395ffac 100644 --- a/include/fkYAML/detail/iterator.hpp +++ b/include/fkYAML/detail/iterator.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_ITERATOR_HPP_ -#define FK_YAML_DETAIL_ITERATOR_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_ITERATOR_HPP +#define FK_YAML_DETAIL_ITERATOR_HPP #include #include @@ -26,7 +24,7 @@ struct sequence_iterator_tag {}; /// @brief A tag which tells Iterator will contain mapping value iterator. struct mapping_iterator_tag {}; -/// @brief The template definitions of type informations used in @ref Iterator class +/// @brief The template definitions of type information used in @ref Iterator class /// @tparam ValueType The type of iterated elements. template struct iterator_traits { @@ -248,7 +246,7 @@ class iterator { return *this; } - /// @brief A post-increment opretor of the iterator class. + /// @brief A post-increment operator of the iterator class. /// @return iterator An iterator object which has been incremented. iterator operator++(int) & noexcept { auto result = *this; @@ -391,4 +389,4 @@ class iterator { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_ITERATOR_HPP_ */ +#endif /* FK_YAML_DETAIL_ITERATOR_HPP */ diff --git a/include/fkYAML/detail/macros/cpp_config_macros.hpp b/include/fkYAML/detail/macros/cpp_config_macros.hpp index a466978c..fdb62402 100644 --- a/include/fkYAML/detail/macros/cpp_config_macros.hpp +++ b/include/fkYAML/detail/macros/cpp_config_macros.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_MACROS_CPP_CONFIG_MACROS_HPP_ -#define FK_YAML_DETAIL_MACROS_CPP_CONFIG_MACROS_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_MACROS_CPP_CONFIG_MACROS_HPP +#define FK_YAML_DETAIL_MACROS_CPP_CONFIG_MACROS_HPP // This file is assumed to be included only by version_macros.hpp file. // To avoid redundant inclusion, do not include version_macros.hpp file as the other files do. @@ -62,6 +60,13 @@ #define FK_YAML_INLINE_VAR #endif +// switch usage of constexpr keyward depending on active C++ standard. +#if defined(FK_YAML_HAS_CXX_17) +#define FK_YAML_CXX17_CONSTEXPR constexpr +#else +#define FK_YAML_CXX17_CONSTEXPR +#endif + // Detect __has_* macros. // The following macros replace redundant `defined(__has_*) && __has_*(...)`. @@ -128,4 +133,4 @@ #define FK_YAML_UNLIKELY(expr) (!!(expr)) #endif -#endif /* FK_YAML_DETAIL_MACROS_CPP_CONFIG_MACROS_HPP_ */ +#endif /* FK_YAML_DETAIL_MACROS_CPP_CONFIG_MACROS_HPP */ diff --git a/include/fkYAML/detail/macros/version_macros.hpp b/include/fkYAML/detail/macros/version_macros.hpp index 9b35990d..044468a6 100644 --- a/include/fkYAML/detail/macros/version_macros.hpp +++ b/include/fkYAML/detail/macros/version_macros.hpp @@ -1,16 +1,14 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT // Check version definitions if already defined. #if defined(FK_YAML_MAJOR_VERSION) && defined(FK_YAML_MINOR_VERSION) && defined(FK_YAML_PATCH_VERSION) -#if FK_YAML_MAJOR_VERSION != 0 || FK_YAML_MINOR_VERSION != 3 || FK_YAML_PATCH_VERSION != 12 +#if FK_YAML_MAJOR_VERSION != 0 || FK_YAML_MINOR_VERSION != 3 || FK_YAML_PATCH_VERSION != 13 #warning Already included a different version of the fkYAML library! #else // define macros to skip defining macros down below. @@ -22,7 +20,7 @@ #define FK_YAML_MAJOR_VERSION 0 #define FK_YAML_MINOR_VERSION 3 -#define FK_YAML_PATCH_VERSION 12 +#define FK_YAML_PATCH_VERSION 13 #define FK_YAML_NAMESPACE_VERSION_CONCAT_IMPL(major, minor, patch) v##major##_##minor##_##patch diff --git a/include/fkYAML/detail/meta/detect.hpp b/include/fkYAML/detail/meta/detect.hpp index 56e30e48..062a87c3 100644 --- a/include/fkYAML/detail/meta/detect.hpp +++ b/include/fkYAML/detail/meta/detect.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -#ifndef FK_YAML_DETAIL_META_DETECT_HPP_ -#define FK_YAML_DETAIL_META_DETECT_HPP_ +#ifndef FK_YAML_DETAIL_META_DETECT_HPP +#define FK_YAML_DETAIL_META_DETECT_HPP #include @@ -75,4 +73,4 @@ using is_detected_exact = std::is_same>; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_META_DETECT_HPP_ */ +#endif /* FK_YAML_DETAIL_META_DETECT_HPP */ diff --git a/include/fkYAML/detail/meta/input_adapter_traits.hpp b/include/fkYAML/detail/meta/input_adapter_traits.hpp index 359b84c5..734f30b9 100644 --- a/include/fkYAML/detail/meta/input_adapter_traits.hpp +++ b/include/fkYAML/detail/meta/input_adapter_traits.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_META_INPUT_ADAPTER_TRAITS_HPP_ -#define FK_YAML_DETAIL_META_INPUT_ADAPTER_TRAITS_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_META_INPUT_ADAPTER_TRAITS_HPP +#define FK_YAML_DETAIL_META_INPUT_ADAPTER_TRAITS_HPP #include #include @@ -103,4 +101,4 @@ struct is_contiguous_container> : std::true_type {}; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_META_INPUT_ADAPTER_TRAITS_HPP_ */ +#endif /* FK_YAML_DETAIL_META_INPUT_ADAPTER_TRAITS_HPP */ diff --git a/include/fkYAML/detail/meta/node_traits.hpp b/include/fkYAML/detail/meta/node_traits.hpp index bb64befa..e94e6409 100644 --- a/include/fkYAML/detail/meta/node_traits.hpp +++ b/include/fkYAML/detail/meta/node_traits.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_META_NODE_TRAITS_HPP_ -#define FK_YAML_DETAIL_META_NODE_TRAITS_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_META_NODE_TRAITS_HPP +#define FK_YAML_DETAIL_META_NODE_TRAITS_HPP #include #include @@ -86,7 +84,7 @@ using from_node_function_t = decltype(T::from_node(std::declval()...)); /// @tparam T A type which provides to_node function. /// @tparam Args Argument types passed to to_node function. template -using to_node_funcion_t = decltype(T::to_node(std::declval()...)); +using to_node_function_t = decltype(T::to_node(std::declval()...)); /////////////////////////////////////////////////// // basic_node conversion API detection traits @@ -127,7 +125,7 @@ struct has_to_node::value>> { using converter = typename BasicNodeType::template value_converter_type; // NOLINTNEXTLINE(readability-identifier-naming) - static constexpr bool value = is_detected_exact::value; + static constexpr bool value = is_detected_exact::value; }; /////////////////////////////////////// @@ -160,4 +158,4 @@ struct is_node_compatible_type : is_node_compatible_type_impl -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_META_STL_SUPPLEMENT_HPP_ -#define FK_YAML_DETAIL_META_STL_SUPPLEMENT_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_META_STL_SUPPLEMENT_HPP +#define FK_YAML_DETAIL_META_STL_SUPPLEMENT_HPP #include #include @@ -178,4 +176,4 @@ using std::remove_cvref_t; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_META_STL_SUPPLEMENT_HPP_ */ +#endif /* FK_YAML_DETAIL_META_STL_SUPPLEMENT_HPP */ diff --git a/include/fkYAML/detail/meta/type_traits.hpp b/include/fkYAML/detail/meta/type_traits.hpp index b1307477..06a3d663 100644 --- a/include/fkYAML/detail/meta/type_traits.hpp +++ b/include/fkYAML/detail/meta/type_traits.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_META_TYPE_TRAITS_HPP_ -#define FK_YAML_DETAIL_META_TYPE_TRAITS_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_META_TYPE_TRAITS_HPP +#define FK_YAML_DETAIL_META_TYPE_TRAITS_HPP #include #include @@ -32,7 +30,7 @@ struct is_comparable : std::false_type {}; /// @brief A partial specialization of is_comparable if T and U are comparable types. /// @tparam Comparator An object type to compare T and U objects. /// @tparam T A type for comparison. -/// @tparam U Ther other type for comparison. +/// @tparam U The other type for comparison. template struct is_comparable< Comparator, T, U, @@ -164,4 +162,4 @@ using head_type = typename get_head_type::type; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_META_TYPE_TRAITS_HPP_ */ +#endif /* FK_YAML_DETAIL_META_TYPE_TRAITS_HPP */ diff --git a/include/fkYAML/detail/node_attrs.hpp b/include/fkYAML/detail/node_attrs.hpp index 414be7b5..c70e6256 100644 --- a/include/fkYAML/detail/node_attrs.hpp +++ b/include/fkYAML/detail/node_attrs.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_NODE_ATTRS_HPP_ -#define FK_YAML_DETAIL_NODE_ATTRS_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_NODE_ATTRS_HPP +#define FK_YAML_DETAIL_NODE_ATTRS_HPP #include #include @@ -136,4 +134,4 @@ inline void set_anchor_offset(uint32_t offset, node_attr_t& attrs) noexcept { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_NODE_ATTRS_HPP_ */ +#endif /* FK_YAML_DETAIL_NODE_ATTRS_HPP */ diff --git a/include/fkYAML/detail/node_property.hpp b/include/fkYAML/detail/node_property.hpp index 5a357a07..797be52d 100644 --- a/include/fkYAML/detail/node_property.hpp +++ b/include/fkYAML/detail/node_property.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -#ifndef FK_YAML_DETAIL_NODE_PROPERTY_HPP_ -#define FK_YAML_DETAIL_NODE_PROPERTY_HPP_ +#ifndef FK_YAML_DETAIL_NODE_PROPERTY_HPP +#define FK_YAML_DETAIL_NODE_PROPERTY_HPP #include @@ -26,4 +24,4 @@ struct node_property { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_NODE_PROPERTY_HPP_ */ +#endif /* FK_YAML_DETAIL_NODE_PROPERTY_HPP */ diff --git a/include/fkYAML/detail/node_ref_storage.hpp b/include/fkYAML/detail/node_ref_storage.hpp index daaa1c9a..958d8f98 100644 --- a/include/fkYAML/detail/node_ref_storage.hpp +++ b/include/fkYAML/detail/node_ref_storage.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_NODE_REF_STORAGE_HPP_ -#define FK_YAML_DETAIL_NODE_REF_STORAGE_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_NODE_REF_STORAGE_HPP +#define FK_YAML_DETAIL_NODE_REF_STORAGE_HPP #include #include @@ -85,4 +83,4 @@ class node_ref_storage { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_NODE_REF_STORAGE_HPP_ */ +#endif /* FK_YAML_DETAIL_NODE_REF_STORAGE_HPP */ diff --git a/include/fkYAML/detail/output/serializer.hpp b/include/fkYAML/detail/output/serializer.hpp index aab24303..92b4880c 100644 --- a/include/fkYAML/detail/output/serializer.hpp +++ b/include/fkYAML/detail/output/serializer.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_OUTPUT_SERIALIZER_HPP_ -#define FK_YAML_DETAIL_OUTPUT_SERIALIZER_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_OUTPUT_SERIALIZER_HPP +#define FK_YAML_DETAIL_OUTPUT_SERIALIZER_HPP #include #include @@ -80,7 +78,7 @@ class basic_serializer { } /// @brief Serialize the directives if any is applied to the node. - /// @param node The targe node. + /// @param node The target node. /// @param str A string to hold serialization result. /// @return bool true if any directive is serialized, false otherwise. bool serialize_directives(const BasicNodeType& node, std::string& str) { @@ -291,7 +289,7 @@ class basic_serializer { /// @brief Append an anchor property if it's available. Do nothing otherwise. /// @param node The target node which is possibly an anchor node. - /// @param prepends_space Whether or not to prepend a space before an anchor property. + /// @param prepends_space Whether to prepend a space before an anchor property. /// @param str A string to hold serialization result. /// @return true if an anchor property has been appended, false otherwise. bool try_append_anchor(const BasicNodeType& node, bool prepends_space, std::string& str) const { @@ -307,7 +305,7 @@ class basic_serializer { /// @brief Append an alias property if it's available. Do nothing otherwise. /// @param node The target node which is possibly an alias node. - /// @param prepends_space Whether or not to prepend a space before an alias property. + /// @param prepends_space Whether to prepend a space before an alias property. /// @param str A string to hold serialization result. /// @return true if an alias property has been appended, false otherwise. bool try_append_alias(const BasicNodeType& node, bool prepends_space, std::string& str) const { @@ -338,7 +336,7 @@ class basic_serializer { /// @brief Get a string value from the given node and, if necessary, escape its contents. /// @param[in] node The target string YAML node. - /// @param[out] is_escaped Whether or not the contents of an ouput string has been escaped. + /// @param[out] is_escaped Whether the contents of an output string has been escaped. /// @return The (escaped) string node value. typename BasicNodeType::string_type get_string_node_value(const BasicNodeType& node, bool& is_escaped) { FK_YAML_ASSERT(node.is_string()); @@ -355,4 +353,4 @@ class basic_serializer { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_OUTPUT_SERIALIZER_HPP_ */ +#endif /* FK_YAML_DETAIL_OUTPUT_SERIALIZER_HPP */ diff --git a/include/fkYAML/detail/str_view.hpp b/include/fkYAML/detail/str_view.hpp index e6ee210a..ff65d90f 100644 --- a/include/fkYAML/detail/str_view.hpp +++ b/include/fkYAML/detail/str_view.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_STR_VIEW_HPP_ -#define FK_YAML_DETAIL_STR_VIEW_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_STR_VIEW_HPP +#define FK_YAML_DETAIL_STR_VIEW_HPP #include #include @@ -71,33 +69,51 @@ class basic_str_view { static constexpr size_type npos = static_cast(-1); /// Constructs a basic_str_view object. - basic_str_view() noexcept = default; + constexpr basic_str_view() noexcept = default; /// Destroys a basic_str_view object. ~basic_str_view() noexcept = default; /// @brief Copy constructs a basic_str_view object. /// @param _ A basic_str_view object to copy from. - basic_str_view(const basic_str_view&) noexcept = default; + constexpr basic_str_view(const basic_str_view&) noexcept = default; /// @brief Move constructs a basic_str_view object. /// @param _ A basic_str_view object to move from. - basic_str_view(basic_str_view&&) noexcept = default; + constexpr basic_str_view(basic_str_view&&) noexcept = default; /// @brief Constructs a basic_str_view object from a pointer to a character sequence. + /// @note std::char_traits::length() is constexpr from C++17. /// @param p_str A pointer to a character sequence. (Must be null-terminated, or an undefined behavior.) - basic_str_view(const value_type* p_str) noexcept + template < + typename CharPtrT, + enable_if_t< + disjunction, std::is_same>::value, int> = + 0> + FK_YAML_CXX17_CONSTEXPR basic_str_view(CharPtrT p_str) noexcept : m_len(traits_type::length(p_str)), mp_str(p_str) { } + /// @brief Constructs a basic_str_view object from a C-style char array. + /// @note + /// This constructor assumes the last element is the null character ('\0'). If that's not desirable, consider using + /// one of the other overloads. + /// @tparam N The size of a C-style char array. + /// @param str A C-style char array. (Must be null-terminated) + template + constexpr basic_str_view(const value_type (&str)[N]) noexcept + : m_len(N - 1), + mp_str(&str[0]) { + } + /// @brief Construction from a null pointer is forbidden. basic_str_view(std::nullptr_t) = delete; - /// @brief Constructs a basic_str_view object from a poineter to a character sequence and its size. + /// @brief Constructs a basic_str_view object from a pointer to a character sequence and its size. /// @param p_str A pointer to a character sequence. (May or may not be null-terminated.) /// @param len The length of a character sequence. - basic_str_view(const value_type* p_str, size_type len) noexcept + constexpr basic_str_view(const value_type* p_str, size_type len) noexcept : m_len(len), mp_str(p_str) { } @@ -116,7 +132,7 @@ class basic_str_view { int> = 0> basic_str_view(ItrType first, ItrType last) noexcept : m_len(last - first), - mp_str(m_len > 0 ? &*first : nullptr) { + mp_str(&*first) { } /// @brief Constructs a basic_str_view object from a compatible std::basic_string object. @@ -266,7 +282,7 @@ class basic_str_view { } /// @brief Copys the referenced character sequence values from `pos` by `n` size. - /// @warning Throws an fkyaml::out_of_range exception if the given `pos` is bigger than the lenth. + /// @warning Throws an fkyaml::out_of_range exception if the given `pos` is bigger than the length. /// @param p_str The pointer to a character sequence buffer for output. /// @param n The number of elements to write into `p_str`. /// @param pos The offset of the beginning position to copy values. @@ -281,7 +297,7 @@ class basic_str_view { } /// @brief Constructs a sub basic_str_view object from `pos` by `n` size. - /// @warning Throws an fkyaml::out_of_range exception if the given `pos` is bigger than the lenth. + /// @warning Throws an fkyaml::out_of_range exception if the given `pos` is bigger than the length. /// @param pos The offset of the beginning position. /// @param n The number of elements to the end of a new sub basic_str_view object. /// @return A newly created sub basic_str_view object. @@ -342,7 +358,7 @@ class basic_str_view { /// @brief Compares the referenced character sequence with `s` character sequence. /// @param s The pointer to a character sequence to compare with. - /// @return The lexicolographical comparison result. The values are same as std::strncmp(). + /// @return The lexicographical comparison result. The values are same as std::strncmp(). int compare(const CharT* s) const { return compare(basic_str_view(s)); } @@ -960,4 +976,4 @@ using u32str_view = basic_str_view; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_STR_VIEW_HPP_ */ +#endif /* FK_YAML_DETAIL_STR_VIEW_HPP */ diff --git a/include/fkYAML/detail/string_formatter.hpp b/include/fkYAML/detail/string_formatter.hpp index ff3ff0dd..c9456ad5 100644 --- a/include/fkYAML/detail/string_formatter.hpp +++ b/include/fkYAML/detail/string_formatter.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_STRING_FORMATTER_HPP_ -#define FK_YAML_DETAIL_STRING_FORMATTER_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_STRING_FORMATTER_HPP +#define FK_YAML_DETAIL_STRING_FORMATTER_HPP #include #include @@ -43,4 +41,4 @@ inline std::string format(const char* fmt, ...) { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_STRING_FORMATTER_HPP_ */ +#endif /* FK_YAML_DETAIL_STRING_FORMATTER_HPP */ diff --git a/include/fkYAML/detail/types/lexical_token_t.hpp b/include/fkYAML/detail/types/lexical_token_t.hpp index 9e4469d6..9ffa463a 100644 --- a/include/fkYAML/detail/types/lexical_token_t.hpp +++ b/include/fkYAML/detail/types/lexical_token_t.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -#ifndef FK_YAML_DETAIL_TYPES_LEXICAL_TOKEN_T_HPP_ -#define FK_YAML_DETAIL_TYPES_LEXICAL_TOKEN_T_HPP_ +#ifndef FK_YAML_DETAIL_TYPES_LEXICAL_TOKEN_T_HPP +#define FK_YAML_DETAIL_TYPES_LEXICAL_TOKEN_T_HPP #include @@ -19,8 +17,8 @@ FK_YAML_DETAIL_NAMESPACE_BEGIN enum class lexical_token_t { END_OF_BUFFER, //!< the end of input buffer. EXPLICIT_KEY_PREFIX, //!< the character for explicit mapping key prefix `?`. - KEY_SEPARATOR, //!< the key separater `:` - VALUE_SEPARATOR, //!< the value separater `,` + KEY_SEPARATOR, //!< the key separator `:` + VALUE_SEPARATOR, //!< the value separator `,` ANCHOR_PREFIX, //!< the character for anchor prefix `&` ALIAS_PREFIX, //!< the character for alias prefix `*` YAML_VER_DIRECTIVE, //!< a YAML version directive found. use get_yaml_version() to get a value. @@ -35,11 +33,12 @@ enum class lexical_token_t { PLAIN_SCALAR, //!< plain (unquoted) scalars SINGLE_QUOTED_SCALAR, //!< single-quoted scalars DOUBLE_QUOTED_SCALAR, //!< double-quoted scalars - BLOCK_SCALAR, //!< block style scalars + BLOCK_LITERAL_SCALAR, //!< block literal style scalars + BLOCK_FOLDED_SCALAR, //!< block folded style scalars END_OF_DIRECTIVES, //!< the end of declaration of directives specified by `---`. END_OF_DOCUMENT, //!< the end of a YAML document specified by `...`. }; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_TYPES_LEXICAL_TOKEN_T_HPP_ */ +#endif /* FK_YAML_DETAIL_TYPES_LEXICAL_TOKEN_T_HPP */ diff --git a/include/fkYAML/detail/types/node_t.hpp b/include/fkYAML/detail/types/node_t.hpp index 62d8c210..5fbad207 100644 --- a/include/fkYAML/detail/types/node_t.hpp +++ b/include/fkYAML/detail/types/node_t.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -#ifndef FK_YAML_DETAIL_TYPES_NODE_T_HPP_ -#define FK_YAML_DETAIL_TYPES_NODE_T_HPP_ +#ifndef FK_YAML_DETAIL_TYPES_NODE_T_HPP +#define FK_YAML_DETAIL_TYPES_NODE_T_HPP #include #include @@ -95,4 +93,4 @@ inline node_type convert_to_node_type(node_t t) { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_TYPES_NODE_T_HPP_ */ +#endif /* FK_YAML_DETAIL_TYPES_NODE_T_HPP */ diff --git a/include/fkYAML/detail/types/yaml_version_t.hpp b/include/fkYAML/detail/types/yaml_version_t.hpp index dfb505eb..ebf14ae2 100644 --- a/include/fkYAML/detail/types/yaml_version_t.hpp +++ b/include/fkYAML/detail/types/yaml_version_t.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_TYPES_YAML_VERSION_T_HPP_ -#define FK_YAML_DETAIL_TYPES_YAML_VERSION_T_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_TYPES_YAML_VERSION_T_HPP +#define FK_YAML_DETAIL_TYPES_YAML_VERSION_T_HPP #include @@ -48,4 +46,4 @@ inline yaml_version_type convert_to_yaml_version_type(yaml_version_t t) noexcept FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_TYPES_YAML_VERSION_T_HPP_ */ +#endif /* FK_YAML_DETAIL_TYPES_YAML_VERSION_T_HPP */ diff --git a/include/fkYAML/exception.hpp b/include/fkYAML/exception.hpp index 4e358a96..23a91f1d 100644 --- a/include/fkYAML/exception.hpp +++ b/include/fkYAML/exception.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_EXCEPTION_HPP_ -#define FK_YAML_EXCEPTION_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_EXCEPTION_HPP +#define FK_YAML_EXCEPTION_HPP #include #include @@ -187,4 +185,4 @@ class invalid_tag : public exception { FK_YAML_NAMESPACE_END -#endif /* FK_YAML_EXCEPTION_HPP_ */ +#endif /* FK_YAML_EXCEPTION_HPP */ diff --git a/include/fkYAML/node.hpp b/include/fkYAML/node.hpp index 308f6415..05285f09 100644 --- a/include/fkYAML/node.hpp +++ b/include/fkYAML/node.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_NODE_HPP_ -#define FK_YAML_NODE_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_NODE_HPP +#define FK_YAML_NODE_HPP #include #include @@ -118,7 +116,7 @@ class basic_node { using initializer_list_t = std::initializer_list>; /// @brief The actual storage for a YAML node value of the @ref basic_node class. - /// @details This union combines the different sotrage types for the YAML value types defined in @ref node_t. + /// @details This union combines the different storage types for the YAML value types defined in @ref node_t. /// @note Container types are stored as pointers so that the size of this union will not exceed 64 bits by /// default. union node_value { @@ -777,7 +775,7 @@ class basic_node { ret = (*(p_this_value->p_mapping) < *(p_other_value->p_mapping)); break; case detail::node_attr_bits::null_bit: // LCOV_EXCL_LINE - // Will not come here since null nodes are alyways the same. + // Will not come here since null nodes are always the same. break; // LCOV_EXCL_LINE case detail::node_attr_bits::bool_bit: // false < true @@ -957,7 +955,7 @@ class basic_node { } } - /// @brief Check whether or not this basic_node object has a given key in its inner mapping node value. + /// @brief Check whether this basic_node object has a given key in its inner mapping node value. /// @tparam KeyType A key type compatible with basic_node. /// @param key A key to the target value in the mapping node value. /// @return true if the target node is a mapping and has the given key, false otherwise. @@ -981,7 +979,7 @@ class basic_node { return false; } - /// @brief Check whether or not this basic_node object has a given key in its inner mapping Node value. + /// @brief Check whether this basic_node object has a given key in its inner mapping Node value. /// @tparam KeyType A key type which is a kind of basic_node template class. /// @param[in] key A key to the target value in the YAML mapping node value. /// @return true if the YAML node is a mapping and has the given key, false otherwise. @@ -1196,7 +1194,7 @@ class basic_node { set_yaml_version_type(detail::convert_to_yaml_version_type(version)); } - /// @brief Check whether or not this basic_node object has already had any anchor name. + /// @brief Check whether this basic_node object has already had any anchor name. /// @return true if ths basic_node has an anchor name, false otherwise. /// @sa https://fktn-k.github.io/fkYAML/api/basic_node/has_anchor_name/ bool has_anchor_name() const noexcept { @@ -1271,7 +1269,7 @@ class basic_node { m_prop.anchor = std::move(anchor_name); } - /// @brief Check whether or not this basic_node object has already had any tag name. + /// @brief Check whether this basic_node object has already had any tag name. /// @return true if ths basic_node has a tag name, false otherwise. /// @sa https://fktn-k.github.io/fkYAML/api/basic_node/has_tag_name/ bool has_tag_name() const noexcept { @@ -1720,4 +1718,4 @@ inline fkyaml::node operator"" _yaml(const char8_t* s, std::size_t n) { FK_YAML_NAMESPACE_END -#endif /* FK_YAML_NODE_HPP_ */ +#endif /* FK_YAML_NODE_HPP */ diff --git a/include/fkYAML/node_type.hpp b/include/fkYAML/node_type.hpp index d3e11ab1..16f99065 100644 --- a/include/fkYAML/node_type.hpp +++ b/include/fkYAML/node_type.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_NODE_TYPE_HPP_ -#define FK_YAML_NODE_TYPE_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_NODE_TYPE_HPP +#define FK_YAML_NODE_TYPE_HPP #include @@ -50,4 +48,4 @@ inline const char* to_string(node_type t) noexcept { FK_YAML_NAMESPACE_END -#endif /* FK_YAML_NODE_TYPE_HPP_ */ +#endif /* FK_YAML_NODE_TYPE_HPP */ diff --git a/include/fkYAML/node_value_converter.hpp b/include/fkYAML/node_value_converter.hpp index 8218fe5a..0d538784 100644 --- a/include/fkYAML/node_value_converter.hpp +++ b/include/fkYAML/node_value_converter.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_NODE_VALUE_CONVERTER_HPP_ -#define FK_YAML_NODE_VALUE_CONVERTER_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_NODE_VALUE_CONVERTER_HPP +#define FK_YAML_NODE_VALUE_CONVERTER_HPP #include @@ -54,4 +52,4 @@ class node_value_converter { FK_YAML_NAMESPACE_END -#endif /* FK_YAML_NODE_VALUE_CONVERTER_HPP_ */ +#endif /* FK_YAML_NODE_VALUE_CONVERTER_HPP */ diff --git a/include/fkYAML/ordered_map.hpp b/include/fkYAML/ordered_map.hpp index 0aa94fda..3a51a5af 100644 --- a/include/fkYAML/ordered_map.hpp +++ b/include/fkYAML/ordered_map.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_ORDERED_MAP_HPP_ -#define FK_YAML_ORDERED_MAP_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_ORDERED_MAP_HPP +#define FK_YAML_ORDERED_MAP_HPP #include #include @@ -173,4 +171,4 @@ class ordered_map : public std::vector, Allocator> { FK_YAML_NAMESPACE_END -#endif /* FK_YAML_ORDERED_MAP_HPP_ */ +#endif /* FK_YAML_ORDERED_MAP_HPP */ diff --git a/include/fkYAML/yaml_version_type.hpp b/include/fkYAML/yaml_version_type.hpp index 038b030a..903e7115 100644 --- a/include/fkYAML/yaml_version_type.hpp +++ b/include/fkYAML/yaml_version_type.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_YAML_VERSION_TYPE_HPP_ -#define FK_YAML_YAML_VERSION_TYPE_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_YAML_VERSION_TYPE_HPP +#define FK_YAML_YAML_VERSION_TYPE_HPP #include @@ -35,4 +33,4 @@ inline const char* to_string(yaml_version_type t) noexcept { FK_YAML_NAMESPACE_END -#endif /* FK_YAML_YAML_VERSION_TYPE_HPP_ */ +#endif /* FK_YAML_YAML_VERSION_TYPE_HPP */ diff --git a/single_include/fkYAML/node.hpp b/single_include/fkYAML/node.hpp index 9d8a4446..c8fe012d 100644 --- a/single_include/fkYAML/node.hpp +++ b/single_include/fkYAML/node.hpp @@ -1,15 +1,13 @@ -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_NODE_HPP_ -#define FK_YAML_NODE_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_NODE_HPP +#define FK_YAML_NODE_HPP #include #include @@ -22,19 +20,17 @@ #include // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT // Check version definitions if already defined. #if defined(FK_YAML_MAJOR_VERSION) && defined(FK_YAML_MINOR_VERSION) && defined(FK_YAML_PATCH_VERSION) -#if FK_YAML_MAJOR_VERSION != 0 || FK_YAML_MINOR_VERSION != 3 || FK_YAML_PATCH_VERSION != 12 +#if FK_YAML_MAJOR_VERSION != 0 || FK_YAML_MINOR_VERSION != 3 || FK_YAML_PATCH_VERSION != 13 #warning Already included a different version of the fkYAML library! #else // define macros to skip defining macros down below. @@ -46,7 +42,7 @@ #define FK_YAML_MAJOR_VERSION 0 #define FK_YAML_MINOR_VERSION 3 -#define FK_YAML_PATCH_VERSION 12 +#define FK_YAML_PATCH_VERSION 13 #define FK_YAML_NAMESPACE_VERSION_CONCAT_IMPL(major, minor, patch) v##major##_##minor##_##patch @@ -72,18 +68,16 @@ FK_YAML_NAMESPACE_END // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_MACROS_CPP_CONFIG_MACROS_HPP_ -#define FK_YAML_DETAIL_MACROS_CPP_CONFIG_MACROS_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_MACROS_CPP_CONFIG_MACROS_HPP +#define FK_YAML_DETAIL_MACROS_CPP_CONFIG_MACROS_HPP // This file is assumed to be included only by version_macros.hpp file. // To avoid redundant inclusion, do not include version_macros.hpp file as the other files do. @@ -136,6 +130,13 @@ #define FK_YAML_INLINE_VAR #endif +// switch usage of constexpr keyward depending on active C++ standard. +#if defined(FK_YAML_HAS_CXX_17) +#define FK_YAML_CXX17_CONSTEXPR constexpr +#else +#define FK_YAML_CXX17_CONSTEXPR +#endif + // Detect __has_* macros. // The following macros replace redundant `defined(__has_*) && __has_*(...)`. @@ -202,24 +203,22 @@ #define FK_YAML_UNLIKELY(expr) (!!(expr)) #endif -#endif /* FK_YAML_DETAIL_MACROS_CPP_CONFIG_MACROS_HPP_ */ +#endif /* FK_YAML_DETAIL_MACROS_CPP_CONFIG_MACROS_HPP */ #endif // !defined(FK_YAML_VERCHECK_SUCCEEDED) // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_ASSERT_HPP_ -#define FK_YAML_DETAIL_ASSERT_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_ASSERT_HPP +#define FK_YAML_DETAIL_ASSERT_HPP // if FK_YAML_ASSERT is not user-defined. apply the default assert impl. #ifndef FK_YAML_ASSERT @@ -231,21 +230,19 @@ #endif #endif -#endif /* FK_YAML_DETAIL_ASSERT_HPP_ */ +#endif /* FK_YAML_DETAIL_ASSERT_HPP */ // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_DOCUMENT_METAINFO_HPP_ -#define FK_YAML_DETAIL_DOCUMENT_METAINFO_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_DOCUMENT_METAINFO_HPP +#define FK_YAML_DETAIL_DOCUMENT_METAINFO_HPP #include #include @@ -253,52 +250,46 @@ // #include // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_META_NODE_TRAITS_HPP_ -#define FK_YAML_DETAIL_META_NODE_TRAITS_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_META_NODE_TRAITS_HPP +#define FK_YAML_DETAIL_META_NODE_TRAITS_HPP // #include // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_META_DETECT_HPP_ -#define FK_YAML_DETAIL_META_DETECT_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_META_DETECT_HPP +#define FK_YAML_DETAIL_META_DETECT_HPP #include // #include // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_META_STL_SUPPLEMENT_HPP_ -#define FK_YAML_DETAIL_META_STL_SUPPLEMENT_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_META_STL_SUPPLEMENT_HPP +#define FK_YAML_DETAIL_META_STL_SUPPLEMENT_HPP #include #include @@ -468,7 +459,7 @@ using std::remove_cvref_t; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_META_STL_SUPPLEMENT_HPP_ */ +#endif /* FK_YAML_DETAIL_META_STL_SUPPLEMENT_HPP */ FK_YAML_DETAIL_NAMESPACE_BEGIN @@ -530,23 +521,21 @@ using is_detected_exact = std::is_same>; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_META_DETECT_HPP_ */ +#endif /* FK_YAML_DETAIL_META_DETECT_HPP */ // #include // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_META_TYPE_TRAITS_HPP_ -#define FK_YAML_DETAIL_META_TYPE_TRAITS_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_META_TYPE_TRAITS_HPP +#define FK_YAML_DETAIL_META_TYPE_TRAITS_HPP #include #include @@ -572,7 +561,7 @@ struct is_comparable : std::false_type {}; /// @brief A partial specialization of is_comparable if T and U are comparable types. /// @tparam Comparator An object type to compare T and U objects. /// @tparam T A type for comparison. -/// @tparam U Ther other type for comparison. +/// @tparam U The other type for comparison. template struct is_comparable< Comparator, T, U, @@ -704,7 +693,7 @@ using head_type = typename get_head_type::type; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_META_TYPE_TRAITS_HPP_ */ +#endif /* FK_YAML_DETAIL_META_TYPE_TRAITS_HPP */ FK_YAML_NAMESPACE_BEGIN @@ -777,7 +766,7 @@ using from_node_function_t = decltype(T::from_node(std::declval()...)); /// @tparam T A type which provides to_node function. /// @tparam Args Argument types passed to to_node function. template -using to_node_funcion_t = decltype(T::to_node(std::declval()...)); +using to_node_function_t = decltype(T::to_node(std::declval()...)); /////////////////////////////////////////////////// // basic_node conversion API detection traits @@ -818,7 +807,7 @@ struct has_to_node::value>> { using converter = typename BasicNodeType::template value_converter_type; // NOLINTNEXTLINE(readability-identifier-naming) - static constexpr bool value = is_detected_exact::value; + static constexpr bool value = is_detected_exact::value; }; /////////////////////////////////////// @@ -851,21 +840,19 @@ struct is_node_compatible_type : is_node_compatible_type_impl -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_YAML_VERSION_TYPE_HPP_ -#define FK_YAML_YAML_VERSION_TYPE_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_YAML_VERSION_TYPE_HPP +#define FK_YAML_YAML_VERSION_TYPE_HPP #include @@ -892,7 +879,7 @@ inline const char* to_string(yaml_version_type t) noexcept { FK_YAML_NAMESPACE_END -#endif /* FK_YAML_YAML_VERSION_TYPE_HPP_ */ +#endif /* FK_YAML_YAML_VERSION_TYPE_HPP */ FK_YAML_DETAIL_NAMESPACE_BEGIN @@ -902,7 +889,7 @@ template named_handle_map {}; - /// The map of anchor node which allowes for key duplication. + /// The map of anchor node which allows for key duplication. std::multimap anchor_table {}; }; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_DOCUMENT_METAINFO_HPP_ */ +#endif /* FK_YAML_DETAIL_DOCUMENT_METAINFO_HPP */ // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_INPUT_DESERIALIZER_HPP_ -#define FK_YAML_DETAIL_INPUT_DESERIALIZER_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_INPUT_DESERIALIZER_HPP +#define FK_YAML_DETAIL_INPUT_DESERIALIZER_HPP #include #include @@ -938,4326 +923,4996 @@ FK_YAML_DETAIL_NAMESPACE_END // #include -// #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file +// #include -// **NOTE FOR LIBARARY DEVELOPERS**: -// Implementations in this header file are intentionally optimized for conversions between YAML scalars and native C++ -// types. So, some implementations don't follow the convensions in the standard C++ functions. For example, octals must -// begin with "0o" (not "0"), which is specified in the YAML spec 1.2. +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -#ifndef FK_YAML_CONVERSIONS_SCALAR_CONV_HPP_ -#define FK_YAML_CONVERSIONS_SCALAR_CONV_HPP_ +#ifndef FK_YAML_DETAIL_INPUT_LEXICAL_ANALYZER_HPP +#define FK_YAML_DETAIL_INPUT_LEXICAL_ANALYZER_HPP -#include -#include -#include +#include +#include +#include // #include -// #include +// #include +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -#if FK_YAML_HAS_TO_CHARS -// Prefer std::to_chars() and std::from_chars() functions if available. -#include -#else -// Fallback to legacy string conversion functions otherwise. -#include // std::stof(), std::stod(), std::stold() -#endif +#ifndef FK_YAML_DETAIL_ENCODINGS_URI_ENCODING_HPP +#define FK_YAML_DETAIL_ENCODINGS_URI_ENCODING_HPP -FK_YAML_DETAIL_NAMESPACE_BEGIN +#include +#include -////////////////////////// -// conv_limits_base // -////////////////////////// +// #include -/// @brief A structure which provides limits for conversions between scalars and integers. -/// @note This structure contains common limits in both signed and unsigned integers. -/// @tparam NumBytes The number of bytes for the integer type. -template -struct conv_limits_base {}; -/// @brief The specialization of conv_limits_base for 1 byte integers, e.g., int8_t, uint8_t. -template <> -struct conv_limits_base<1u> { - /// max characters for octals (0o377) without the prefix part. - static constexpr std::size_t max_chars_oct = 3; - /// max characters for hexadecimals (0xFF) without the prefix part. - static constexpr std::size_t max_chars_hex = 2; +FK_YAML_DETAIL_NAMESPACE_BEGIN - /// @brief Check if the given octals are safely converted into 1 byte integer. - /// @param octs The pointer to octal characters - /// @param len The length of octal characters - /// @return true is safely convertible, false otherwise. - static bool check_if_octs_safe(const char* octs, std::size_t len) noexcept { - return (len < max_chars_oct) || (len == max_chars_oct && octs[0] <= '3'); - } +/// @brief A class which handles URI encodings. +class uri_encoding { +public: + /// @brief Validates the encoding of the given character sequence. + /// @param begin An iterator to the first element of the character sequence. + /// @param end An iterator to the past-the-end element of the character sequence. + /// @return true if all the characters are valid, false otherwise. + static bool validate(const char* begin, const char* end) noexcept { + if (begin == end) { + return true; + } - /// @brief Check if the given hexadecimals are safely converted into 1 byte integer. - /// @param octs The pointer to hexadecimal characters - /// @param len The length of hexadecimal characters - /// @return true is safely convertible, false otherwise. - static bool check_if_hexs_safe(const char* /*unused*/, std::size_t len) noexcept { - return len <= max_chars_hex; - } -}; + const char* current = begin; -/// @brief The specialization of conv_limits_base for 2 byte integers, e.g., int16_t, uint16_t. -template <> -struct conv_limits_base<2u> { - /// max characters for octals (0o177777) without the prefix part. - static constexpr std::size_t max_chars_oct = 6; - /// max characters for hexadecimals (0xFFFF) without the prefix part. - static constexpr std::size_t max_chars_hex = 4; + for (; current != end; ++current) { + if (*current == '%') { + bool are_valid_octets = validate_octets(++current, end); + if (!are_valid_octets) { + return false; + } - /// @brief Check if the given octals are safely converted into 2 byte integer. - /// @param octs The pointer to octal characters - /// @param len The length of octal characters - /// @return true is safely convertible, false otherwise. - static bool check_if_octs_safe(const char* octs, std::size_t len) noexcept { - return (len < max_chars_oct) || (len == max_chars_oct && octs[0] <= '1'); - } + continue; + } - /// @brief Check if the given hexadecimals are safely converted into 2 byte integer. - /// @param octs The pointer to hexadecimal characters - /// @param len The length of hexadecimal characters - /// @return true is safely convertible, false otherwise. - static bool check_if_hexs_safe(const char* /*unused*/, std::size_t len) noexcept { - return len <= max_chars_hex; + bool is_allowed_character = validate_character(*current); + if (!is_allowed_character) { + return false; + } + } + + return true; } -}; -/// @brief The specialization of conv_limits_base for 4 byte integers, e.g., int32_t, uint32_t. -template <> -struct conv_limits_base<4u> { - /// max characters for octals (0o37777777777) without the prefix part. - static constexpr std::size_t max_chars_oct = 11; - /// max characters for hexadecimals (0xFFFFFFFF) without the prefix part. - static constexpr std::size_t max_chars_hex = 8; +private: + /// @brief Validates the given octets. + /// @param begin An iterator to the first octet. + /// @param end An iterator to the past-the-end element of the whole character sequence. + /// @return true if the octets are valid, false otherwise. + static bool validate_octets(const char*& begin, const char*& end) { + for (int i = 0; i < 2; i++, ++begin) { + if (begin == end) { + return false; + } - /// @brief Check if the given octals are safely converted into 4 byte integer. - /// @param octs The pointer to octal characters - /// @param len The length of octal characters - /// @return true is safely convertible, false otherwise. - static bool check_if_octs_safe(const char* octs, std::size_t len) noexcept { - return (len < max_chars_oct) || (len == max_chars_oct && octs[0] <= '3'); - } + // Normalize a character for a-f/A-F comparison + int octet = std::tolower(*begin); - /// @brief Check if the given hexadecimals are safely converted into 4 byte integer. - /// @param octs The pointer to hexadecimal characters - /// @param len The length of hexadecimal characters - /// @return true is safely convertible, false otherwise. - static bool check_if_hexs_safe(const char* /*unused*/, std::size_t len) noexcept { - return len <= max_chars_hex; - } -}; + if ('0' <= octet && octet <= '9') { + continue; + } -/// @brief The specialization of conv_limits_base for 8 byte integers, e.g., int64_t, uint64_t. -template <> -struct conv_limits_base<8u> { - /// max characters for octals (0o1777777777777777777777) without the prefix part. - static constexpr std::size_t max_chars_oct = 22; - /// max characters for hexadecimals (0xFFFFFFFFFFFFFFFF) without the prefix part. - static constexpr std::size_t max_chars_hex = 16; + if ('a' <= octet && octet <= 'f') { + continue; + } - /// @brief Check if the given octals are safely converted into 8 byte integer. - /// @param octs The pointer to octal characters - /// @param len The length of octal characters - /// @return true is safely convertible, false otherwise. - static bool check_if_octs_safe(const char* octs, std::size_t len) noexcept { - return (len < max_chars_oct) || (len == max_chars_oct && octs[0] <= '1'); + return false; + } + + return true; } - /// @brief Check if the given hexadecimals are safely converted into 8 byte integer. - /// @param octs The pointer to hexadecimal characters - /// @param len The length of hexadecimal characters - /// @return true is safely convertible, false otherwise. - static bool check_if_hexs_safe(const char* /*unused*/, std::size_t len) noexcept { - return len <= max_chars_hex; + /// @brief Verify if the given character is allowed as a URI character. + /// @param c The target character. + /// @return true if the given character is allowed as a URI character, false otherwise. + static bool validate_character(char c) { + // Check if the current character is one of reserved/unreserved characters which are allowed for + // use. See the following links for details: + // * reserved characters: https://datatracker.ietf.org/doc/html/rfc3986#section-2.2 + // * unreserved characters: https://datatracker.ietf.org/doc/html/rfc3986#section-2.3 + + switch (c) { + // reserved characters (gen-delims) + case ':': + case '/': + case '?': + case '#': + case '[': + case ']': + case '@': + // reserved characters (sub-delims) + case '!': + case '$': + case '&': + case '\'': + case '(': + case ')': + case '*': + case '+': + case ',': + case ';': + case '=': + // unreserved characters + case '-': + case '.': + case '_': + case '~': + return true; + default: + // alphabets and numbers are also allowed. + return std::isalnum(c); + } } }; -///////////////////// -// conv_limits // -///////////////////// +FK_YAML_DETAIL_NAMESPACE_END -/// @brief A structure which provides limits for conversions between scalars and integers. -/// @note This structure contains limits which differs based on signedness. -/// @tparam NumBytes The number of bytes for the integer type. -/// @tparam IsSigned Whether an integer is signed or unsigned -template -struct conv_limits {}; +#endif /* FK_YAML_DETAIL_ENCODINGS_URI_ENCODING_HPP */ -/// @brief The specialization of conv_limits for 1 byte signed integers, e.g., int8_t. -template <> -struct conv_limits<1u, true> : conv_limits_base<1u> { - /// with or without sign. - static constexpr bool is_signed = true; +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT - /// max characters for decimals (-128..127) without sign. - static constexpr std::size_t max_chars_dec = 3; +#ifndef FK_YAML_DETAIL_ENCODINGS_UTF_ENCODINGS_HPP +#define FK_YAML_DETAIL_ENCODINGS_UTF_ENCODINGS_HPP - /// string representation of max decimal value. - static const char* max_value_chars_dec() noexcept { - // Making this function a static constexpr variable, a link error happens. - // Although the issue has been fixed since C++17, this workaround is necessary to let this functionality work - // with C++11 (the library's default C++ standard version). - // The same thing is applied to similar functions in the other specializations. - - static constexpr char max_value_chars[] = "127"; - return &max_value_chars[0]; - } +#include +#include - /// string representation of min decimal value without sign. - static const char* min_value_chars_dec() noexcept { - static constexpr char min_value_chars[] = "128"; - return &min_value_chars[0]; - } -}; +// #include -/// @brief The specialization of conv_limits for 1 byte unsigned integers, e.g., uint8_t. -template <> -struct conv_limits<1u, false> : conv_limits_base<1u> { - /// with or without sign. - static constexpr bool is_signed = false; +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT - /// max characters for decimals (0..255) without sign. - static constexpr std::size_t max_chars_dec = 3; +#ifndef FK_YAML_EXCEPTION_HPP +#define FK_YAML_EXCEPTION_HPP - /// string representation of max decimal value. - static const char* max_value_chars_dec() noexcept { - static constexpr char max_value_chars[] = "255"; - return &max_value_chars[0]; - } +#include +#include +#include +#include - /// string representation of min decimal value. - static const char* min_value_chars_dec() noexcept { - static constexpr char min_value_chars[] = "0"; - return &min_value_chars[0]; - } -}; +// #include -/// @brief The specialization of conv_limits for 2 byte signed integers, e.g., int16_t. -template <> -struct conv_limits<2u, true> : conv_limits_base<2u> { - /// with or without sign. - static constexpr bool is_signed = true; +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT - /// max characters for decimals (-32768..32767) without sign. - static constexpr std::size_t max_chars_dec = 5; +#ifndef FK_YAML_DETAIL_STRING_FORMATTER_HPP +#define FK_YAML_DETAIL_STRING_FORMATTER_HPP - /// string representation of max decimal value. - static const char* max_value_chars_dec() noexcept { - static constexpr char max_value_chars[] = "32767"; - return &max_value_chars[0]; - } +#include +#include +#include +#include - /// string representation of min decimal value without sign. - static const char* min_value_chars_dec() noexcept { - static constexpr char min_value_chars[] = "32768"; - return &min_value_chars[0]; - } -}; +// #include -/// @brief The specialization of conv_limits for 2 byte unsigned integers, e.g., uint16_t. -template <> -struct conv_limits<2u, false> : conv_limits_base<2u> { - /// with or without sign. - static constexpr bool is_signed = false; - /// max characters for decimals (0..65535) without sign. - static constexpr std::size_t max_chars_dec = 5; +FK_YAML_DETAIL_NAMESPACE_BEGIN - /// string representation of max decimal value. - static const char* max_value_chars_dec() noexcept { - static constexpr char max_value_chars[] = "65535"; - return &max_value_chars[0]; - } +inline std::string format(const char* fmt, ...) { + va_list vl; + va_start(vl, fmt); + int size = std::vsnprintf(nullptr, 0, fmt, vl); + va_end(vl); - /// string representation of min decimal value. - static const char* min_value_chars_dec() noexcept { - static constexpr char min_value_chars[] = "0"; - return &min_value_chars[0]; + // LCOV_EXCL_START + if (size < 0) { + return ""; } -}; + // LCOV_EXCL_STOP -/// @brief The specialization of conv_limits for 4 byte signed integers, e.g., int32_t. -template <> -struct conv_limits<4u, true> : conv_limits_base<4u> { - /// with or without sign. - static constexpr bool is_signed = true; + std::unique_ptr buffer {new char[size + 1] {}}; - /// max characters for decimals (-2147483648..2147483647) without sign. - static constexpr std::size_t max_chars_dec = 10; + va_start(vl, fmt); + size = std::vsnprintf(buffer.get(), size + 1, fmt, vl); + va_end(vl); - /// string representation of max decimal value. - static const char* max_value_chars_dec() noexcept { - static constexpr char max_value_chars[] = "2147483647"; - return &max_value_chars[0]; - } + return std::string(buffer.get(), size); +} - /// string representation of min decimal value without sign. - static const char* min_value_chars_dec() noexcept { - static constexpr char min_value_chars[] = "2147483648"; - return &min_value_chars[0]; - } -}; +FK_YAML_DETAIL_NAMESPACE_END -/// @brief The specialization of conv_limits for 4 byte unsigned integers, e.g., uint32_t. -template <> -struct conv_limits<4u, false> : conv_limits_base<4u> { - /// with or without sign. - static constexpr bool is_signed = false; +#endif /* FK_YAML_DETAIL_STRING_FORMATTER_HPP */ - /// max characters for decimals (0..4294967295) without sign. - static constexpr std::size_t max_chars_dec = 10; +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT - /// string representation of max decimal value. - static const char* max_value_chars_dec() noexcept { - static constexpr char max_value_chars[] = "4294967295"; - return &max_value_chars[0]; - } +#ifndef FK_YAML_DETAIL_TYPES_NODE_T_HPP +#define FK_YAML_DETAIL_TYPES_NODE_T_HPP - /// string representation of min decimal value. - static const char* min_value_chars_dec() noexcept { - static constexpr char min_value_chars[] = "0"; - return &min_value_chars[0]; - } -}; +#include +#include -/// @brief The specialization of conv_limits for 8 byte signed integers, e.g., int64_t. -template <> -struct conv_limits<8u, true> : conv_limits_base<8u> { - /// with or without sign. - static constexpr bool is_signed = true; +// #include - /// max characters for decimals (-9223372036854775808..9223372036854775807) without sign. - static constexpr std::size_t max_chars_dec = 19; +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT - /// string representation of max decimal value. - static const char* max_value_chars_dec() noexcept { - static constexpr char max_value_chars[] = "9223372036854775807"; - return &max_value_chars[0]; - } +#ifndef FK_YAML_NODE_TYPE_HPP +#define FK_YAML_NODE_TYPE_HPP - /// string representation of min decimal value without sign. - static const char* min_value_chars_dec() noexcept { - static constexpr char min_value_chars[] = "9223372036854775808"; - return &min_value_chars[0]; - } -}; +#include -/// @brief The specialization of conv_limits for 8 byte unsigned integers, e.g., uint64_t. -template <> -struct conv_limits<8u, false> : conv_limits_base<8u> { - /// with or without sign. - static constexpr bool is_signed = false; +// #include - /// max characters for decimals (0..18446744073709551615) without sign. - static constexpr std::size_t max_chars_dec = 20; - /// string representation of max decimal value. - static const char* max_value_chars_dec() noexcept { - static constexpr char max_value_chars[] = "18446744073709551615"; - return &max_value_chars[0]; - } +FK_YAML_NAMESPACE_BEGIN - /// string representation of min decimal value. - static const char* min_value_chars_dec() noexcept { - static constexpr char min_value_chars[] = "0"; - return &min_value_chars[0]; - } +enum class node_type : std::uint32_t { + SEQUENCE, //!< sequence value type + MAPPING, //!< mapping value type + NULL_OBJECT, //!< null value type + BOOLEAN, //!< boolean value type + INTEGER, //!< integer value type + FLOAT, //!< float point value type + STRING, //!< string value type }; -////////////////////////// -// scalar <--> null // -////////////////////////// - -/// @brief Converts a scalar into a null value -/// @tparam CharItr Type of char iterators. Its value type must be `char` (maybe cv-qualified). -/// @param begin The iterator to the first element of the scalar. -/// @param end The iterator to the past-the-end element of the scalar. -/// @param /*unused*/ The null value holder (unused since it can only have `nullptr`) -/// @return true if the conversion completes successfully, false otherwise. -template -inline bool aton(CharItr begin, CharItr end, std::nullptr_t& /*unused*/) noexcept { - static_assert(is_iterator_of::value, "aton() accepts iterators for char type"); - - if FK_YAML_UNLIKELY (begin == end) { - return false; +inline const char* to_string(node_type t) noexcept { + switch (t) { + case node_type::SEQUENCE: + return "SEQUENCE"; + case node_type::MAPPING: + return "MAPPING"; + case node_type::NULL_OBJECT: + return "NULL_OBJECT"; + case node_type::BOOLEAN: + return "BOOLEAN"; + case node_type::INTEGER: + return "INTEGER"; + case node_type::FLOAT: + return "FLOAT"; + case node_type::STRING: + return "STRING"; + default: // LCOV_EXCL_LINE + return ""; // LCOV_EXCL_LINE } +} - uint32_t len = static_cast(std::distance(begin, end)); +FK_YAML_NAMESPACE_END - // This path is the most probable case, so check it first. - if FK_YAML_LIKELY (len == 4) { - const char* p_begin = &*begin; - return (std::strncmp(p_begin, "null", 4) == 0) || (std::strncmp(p_begin, "Null", 4) == 0) || - (std::strncmp(p_begin, "NULL", 4) == 0); - } +#endif /* FK_YAML_NODE_TYPE_HPP */ - if (len == 1) { - return *begin == '~'; - } - return false; -} +FK_YAML_DETAIL_NAMESPACE_BEGIN -///////////////////////////// -// scalar <--> boolean // -///////////////////////////// +/// @brief Definition of node value types. +enum class node_t : std::uint32_t { + SEQUENCE, //!< sequence value type + MAPPING, //!< mapping value type + NULL_OBJECT, //!< null value type + BOOLEAN, //!< boolean value type + INTEGER, //!< integer value type + FLOAT_NUMBER, //!< float number value type + STRING, //!< string value type +}; -/// @brief Converts a scalar into a boolean value -/// @tparam CharItr The type of char iterators. Its value type must be `char` (maybe cv-qualified). -/// @tparam BoolType The output boolean type. -/// @param begin The iterator to the first element of the scalar. -/// @param end The iterator to the past-the-end element of the scalar. -/// @param boolean The boolean value holder. -/// @return true if the conversion completes successfully, false otherwise. -template -inline bool atob(CharItr begin, CharItr end, BoolType& boolean) noexcept { - static_assert(is_iterator_of::value, "atob() accepts iterators for char type"); - - if FK_YAML_UNLIKELY (begin == end) { - return false; +inline const char* to_string(node_t t) noexcept { + switch (t) { + case node_t::SEQUENCE: + return "sequence"; + case node_t::MAPPING: + return "mapping"; + case node_t::NULL_OBJECT: + return "null"; + case node_t::BOOLEAN: + return "boolean"; + case node_t::INTEGER: + return "integer"; + case node_t::FLOAT_NUMBER: + return "float"; + case node_t::STRING: + return "string"; + default: // LCOV_EXCL_LINE + return ""; // LCOV_EXCL_LINE } +} - uint32_t len = static_cast(std::distance(begin, end)); - const char* p_begin = &*begin; - - if (len == 4) { - bool is_true_scalar = (std::strncmp(p_begin, "true", 4) == 0) || (std::strncmp(p_begin, "True", 4) == 0) || - (std::strncmp(p_begin, "TRUE", 4) == 0); - - if FK_YAML_LIKELY (is_true_scalar) { - boolean = static_cast(true); - } - return is_true_scalar; +inline node_t convert_from_node_type(node_type t) { + switch (t) { + case node_type::SEQUENCE: + return node_t::SEQUENCE; + case node_type::MAPPING: + return node_t::MAPPING; + case node_type::NULL_OBJECT: + return node_t::NULL_OBJECT; + case node_type::BOOLEAN: + return node_t::BOOLEAN; + case node_type::INTEGER: + return node_t::INTEGER; + case node_type::FLOAT: + return node_t::FLOAT_NUMBER; + case node_type::STRING: + return node_t::STRING; + default: // LCOV_EXCL_LINE + return node_t::NULL_OBJECT; // LCOV_EXCL_LINE } +} - if (len == 5) { - bool is_false_scalar = (std::strncmp(p_begin, "false", 5) == 0) || (std::strncmp(p_begin, "False", 5) == 0) || - (std::strncmp(p_begin, "FALSE", 5) == 0); - - if FK_YAML_LIKELY (is_false_scalar) { - boolean = static_cast(false); - } - return is_false_scalar; +inline node_type convert_to_node_type(node_t t) { + switch (t) { + case node_t::SEQUENCE: + return node_type::SEQUENCE; + case node_t::MAPPING: + return node_type::MAPPING; + case node_t::NULL_OBJECT: + return node_type::NULL_OBJECT; + case node_t::BOOLEAN: + return node_type::BOOLEAN; + case node_t::INTEGER: + return node_type::INTEGER; + case node_t::FLOAT_NUMBER: + return node_type::FLOAT; + case node_t::STRING: + return node_type::STRING; + default: // LCOV_EXCL_LINE + return node_type::NULL_OBJECT; // LCOV_EXCL_LINE } - - return false; } -///////////////////////////// -// scalar <--> integer // -///////////////////////////// +FK_YAML_DETAIL_NAMESPACE_END -// -// scalar --> decimals -// +#endif /* FK_YAML_DETAIL_TYPES_NODE_T_HPP */ -/// @brief Converts a scalar into decimals. This is common implementation for both signed/unsigned integer types. -/// @warning -/// This function does NOT care about overflows if IntType is unsigned. The source string value must be validated -/// beforehand by calling either atoi_dec_pos() or atoi_dec_neg() functions. -/// Furthermore, `p_begin` and `p_end` must NOT be null. Validate them before calling this function. -/// @tparam IntType The output integer type. It can be either signed or unsigned. -/// @param p_begin The pointer to the first element of the scalar. -/// @param p_end The pointer to the past-the-end element of the scalar. -/// @param i The output integer value holder. -/// @return true if the conversion completes successfully, false otherwise. -template -inline bool atoi_dec_unchecked(const char* p_begin, const char* p_end, IntType& i) noexcept { - static_assert( - is_non_bool_integral::value, - "atoi_dec_unchecked() accepts non-boolean integral types as an output type"); - i = 0; - do { - char c = *p_begin; - if FK_YAML_UNLIKELY (c < '0' || '9' < c) { - return false; - } - // Overflow is intentional when the IntType is signed. - i = i * IntType(10) + IntType(c - '0'); - } while (++p_begin != p_end); +FK_YAML_NAMESPACE_BEGIN - return true; -} +/// @brief A base exception class used in fkYAML library. +/// @sa https://fktn-k.github.io/fkYAML/api/exception/ +class exception : public std::exception { +public: + /// @brief Construct a new exception object without any error messages. + /// @sa https://fktn-k.github.io/fkYAML/api/exception/constructor/ + exception() = default; -/// @brief Converts a scalar into positive decimals. This function executes bounds check to avoid overflow. -/// @warning `p_begin` and `p_end` must not be null. Validate them before calling this function. -/// @tparam IntType The output integer type. It can be either signed or unsigned. -/// @param p_begin The pointer to the first element of the scalar. -/// @param p_end The pointer to the past-the-end element of the scalar. -/// @param i The output integer value holder. -/// @return true if the conversion completes successfully, false otherwise. -template -inline bool atoi_dec_pos(const char* p_begin, const char* p_end, IntType& i) noexcept { - static_assert( - is_non_bool_integral::value, "atoi_dec_pos() accepts non-boolean integral types as an output type"); + /// @brief Construct a new exception object with an error message. + /// @param[in] msg An error message. + /// @sa https://fktn-k.github.io/fkYAML/api/exception/constructor/ + explicit exception(const char* msg) noexcept { + if (msg) { + m_error_msg = msg; + } + } - if FK_YAML_UNLIKELY (p_begin == p_end) { - return false; +public: + /// @brief Returns an error message internally held. If nothing, a non-null, empty string will be returned. + /// @return An error message internally held. The message might be empty. + /// @sa https://fktn-k.github.io/fkYAML/api/exception/what/ + const char* what() const noexcept override { + return m_error_msg.c_str(); } - using conv_limits_type = conv_limits::value>; +private: + /// An error message holder. + std::string m_error_msg {}; +}; - std::size_t len = static_cast(p_end - p_begin); - if FK_YAML_UNLIKELY (len > conv_limits_type::max_chars_dec) { - // Overflow will happen. - return false; +/// @brief An exception class indicating an encoding error. +/// @sa https://fktn-k.github.io/fkYAML/api/exception/invalid_encoding/ +class invalid_encoding : public exception { +public: + /// @brief Construct a new invalid_encoding object for UTF-8 related errors. + /// @param msg An error message. + /// @param u8 The UTF-8 character bytes. + explicit invalid_encoding(const char* msg, const std::initializer_list& u8) noexcept + : exception(generate_error_message(msg, u8).c_str()) { } - if (len == conv_limits_type::max_chars_dec) { - const char* p_max_value_chars_dec = conv_limits_type::max_value_chars_dec(); + /// @brief Construct a new invalid_encoding object for UTF-16 related errors. + /// @param msg An error message. + /// @param u16_h The first UTF-16 encoded element used for the UTF-8 encoding. + /// @param u16_l The second UTF-16 encoded element used for the UTF-8 encoding. + explicit invalid_encoding(const char* msg, std::array u16) noexcept + : exception(generate_error_message(msg, u16).c_str()) { + } - for (std::size_t idx = 0; idx < conv_limits_type::max_chars_dec; idx++) { - if (p_begin[idx] < p_max_value_chars_dec[idx]) { - // No need to check the lower digits. Overflow will no longer happen. - break; - } + /// @brief Construct a new invalid_encoding object for UTF-32 related errors. + /// @param msg An error message. + /// @param u32 The UTF-32 encoded element used for the UTF-8 encoding. + explicit invalid_encoding(const char* msg, char32_t u32) noexcept + : exception(generate_error_message(msg, u32).c_str()) { + } - if FK_YAML_UNLIKELY (p_begin[idx] > p_max_value_chars_dec[idx]) { - // Overflow will happen. - return false; - } +private: + std::string generate_error_message(const char* msg, const std::initializer_list& u8) const noexcept { + auto itr = u8.begin(); + auto end_itr = u8.end(); + std::string formatted = detail::format("invalid_encoding: %s in=[ 0x%02x", msg, *itr++); + while (itr != end_itr) { + formatted += detail::format(", 0x%02x", *itr++); } + formatted += " ]"; + return formatted; } - return atoi_dec_unchecked(p_begin, p_end, i); -} - -/// @brief Converts a scalar into negative decimals. This function executes bounds check to avoid underflow. -/// @warning `p_begin` and `p_end` must not be null. Validate them before calling this function. -/// @tparam IntType The output integer type. It must be signed. -/// @param p_begin The pointer to the first element of the scalar. -/// @param p_end The pointer to the past-the-end element of the scalar. -/// @param i The output integer value holder. -/// @return true if the conversion completes successfully, false otherwise. -template -inline bool atoi_dec_neg(const char* p_begin, const char* p_end, IntType& i) noexcept { - static_assert( - is_non_bool_integral::value, "atoi_dec_neg() accepts non-boolean integral types as an output type"); + /// @brief Generate an error message from the given parameters for the UTF-16 encoding. + /// @param msg An error message. + /// @param h The first UTF-16 encoded element used for the UTF-8 encoding. + /// @param l The second UTF-16 encoded element used for the UTF-8 encoding. + /// @return A generated error message. + std::string generate_error_message(const char* msg, std::array u16) const noexcept { + // uint16_t is large enough for UTF-16 encoded elements. + return detail::format("invalid_encoding: %s in=[ 0x%04x, 0x%04x ]", msg, uint16_t(u16[0]), uint16_t(u16[1])); + } - if FK_YAML_UNLIKELY (p_begin == p_end) { - return false; + /// @brief Generate an error message from the given parameters for the UTF-32 encoding. + /// @param msg An error message. + /// @param u32 The UTF-32 encoded element used for the UTF-8 encoding. + /// @return A genereated error message. + std::string generate_error_message(const char* msg, char32_t u32) const noexcept { + // uint32_t is large enough for UTF-32 encoded elements. + return detail::format("invalid_encoding: %s in=0x%08x", msg, uint32_t(u32)); } +}; - using conv_limits_type = conv_limits::value>; +/// @brief An exception class indicating an error in parsing. +class parse_error : public exception { +public: + explicit parse_error(const char* msg, uint32_t lines, uint32_t cols_in_line) noexcept + : exception(generate_error_message(msg, lines, cols_in_line).c_str()) { + } - std::size_t len = static_cast(p_end - p_begin); - if FK_YAML_UNLIKELY (len > conv_limits_type::max_chars_dec) { - // Underflow will happen. - return false; +private: + std::string generate_error_message(const char* msg, uint32_t lines, uint32_t cols_in_line) const noexcept { + return detail::format("parse_error: %s (at line %u, column %u)", msg, lines, cols_in_line); } +}; - if (len == conv_limits_type::max_chars_dec) { - const char* p_min_value_chars_dec = conv_limits_type::min_value_chars_dec(); +/// @brief An exception class indicating an invalid type conversion. +/// @sa https://fktn-k.github.io/fkYAML/api/exception/type_error/ +class type_error : public exception { +public: + /// @brief Construct a new type_error object with an error message and a node type. + /// @param[in] msg An error message. + /// @param[in] type The type of a source node value. + explicit type_error(const char* msg, node_type type) noexcept + : exception(generate_error_message(msg, type).c_str()) { + } - for (std::size_t idx = 0; idx < conv_limits_type::max_chars_dec; idx++) { - if (p_begin[idx] < p_min_value_chars_dec[idx]) { - // No need to check the lower digits. Underflow will no longer happen. - break; - } + /// @brief Construct a new type_error object with an error message and a node type. + /// @deprecated Use type_error(const char*, node_type) constructor. (since 0.3.12). + /// @param[in] msg An error message. + /// @param[in] type The type of a source node value. + FK_YAML_DEPRECATED("Since 0.3.12; Use explicit type_error(const char*, node_type)") + explicit type_error(const char* msg, detail::node_t type) noexcept + : type_error(msg, detail::convert_to_node_type(type)) { + } - if FK_YAML_UNLIKELY (p_begin[idx] > p_min_value_chars_dec[idx]) { - // Underflow will happen. - return false; - } - } +private: + /// @brief Generate an error message from given parameters. + /// @param msg An error message. + /// @param type The type of a source node value. + /// @return A generated error message. + std::string generate_error_message(const char* msg, node_type type) const noexcept { + return detail::format("type_error: %s type=%s", msg, to_string(type)); } +}; - return atoi_dec_unchecked(p_begin, p_end, i); -} +class out_of_range : public exception { +public: + explicit out_of_range(int index) noexcept + : exception(generate_error_message(index).c_str()) { + } -// -// scalar --> octals -// + explicit out_of_range(const char* key) noexcept + : exception(generate_error_message(key).c_str()) { + } -/// @brief Converts a scalar into octals. This function executes bounds check to avoid overflow. -/// @warning `p_begin` and `p_end` must not be null. Validate them before calling this function. -/// @tparam IntType The output integer type. It can be either signed or unsigned. -/// @param p_begin The pointer to the first element of the scalar. -/// @param p_end The pointer to the past-the-end element of the scalar. -/// @param i The output integer value holder. -/// @return true if the conversion completes successfully, false otherwise. -template -inline bool atoi_oct(const char* p_begin, const char* p_end, IntType& i) noexcept { - static_assert( - is_non_bool_integral::value, "atoi_oct() accepts non-boolean integral types as an output type"); +private: + std::string generate_error_message(int index) { + return detail::format("out_of_range: index %d is out of range", index); + } - if FK_YAML_UNLIKELY (p_begin == p_end) { - return false; + std::string generate_error_message(const char* key) { + return detail::format("out_of_range: key \'%s\' is not found.", key); } +}; - using conv_limits_type = conv_limits::value>; +class invalid_tag : public exception { +public: + explicit invalid_tag(const char* msg, const char* tag) + : exception(generate_error_message(msg, tag).c_str()) { + } - std::size_t len = static_cast(p_end - p_begin); - if FK_YAML_UNLIKELY (!conv_limits_type::check_if_octs_safe(p_begin, len)) { - return false; +private: + std::string generate_error_message(const char* msg, const char* tag) { + return detail::format("invalid_tag: %s tag=%s", msg, tag); } +}; - i = 0; - do { - char c = *p_begin; - if FK_YAML_UNLIKELY (c < '0' || '7' < c) { - return false; - } - i = i * IntType(8) + IntType(c - '0'); - } while (++p_begin != p_end); +FK_YAML_NAMESPACE_END - return true; -} +#endif /* FK_YAML_EXCEPTION_HPP */ -// -// scalar --> hexadecimals -// -/// @brief Converts a scalar into hexadecimals. This function executes bounds check to avoid overflow. -/// @warning `p_begin` and `p_end` must not be null. Validate them before calling this function. -/// @tparam IntType The output integer type. It can be either signed or unsigned. -/// @param p_begin The pointer to the first element of the scalar. -/// @param p_end The pointer to the past-the-end element of the scalar. -/// @param i The output integer value holder. -/// @return true if the conversion completes successfully, false otherwise. -template -inline bool atoi_hex(const char* p_begin, const char* p_end, IntType& i) noexcept { - static_assert( - is_non_bool_integral::value, "atoi_hex() accepts non-boolean integral types as an output type"); +FK_YAML_DETAIL_NAMESPACE_BEGIN - if FK_YAML_UNLIKELY (p_begin == p_end) { - return false; - } +///////////////////////// +// UTF-8 Encoding /// +///////////////////////// - using conv_limits_type = conv_limits::value>; +/// @brief A class which handles UTF-8 encodings. +namespace utf8 { - std::size_t len = static_cast(p_end - p_begin); - if FK_YAML_UNLIKELY (!conv_limits_type::check_if_hexs_safe(p_begin, len)) { - return false; +/// @brief Query the number of UTF-8 character bytes with the first byte. +/// @param first_byte The first byte of a UTF-8 character. +/// @return The number of UTF-8 character bytes. +inline uint32_t get_num_bytes(uint8_t first_byte) { + // The first byte starts with 0b0XXX'XXXX -> 1-byte character + if (first_byte < 0x80) { + return 1; + } + // The first byte starts with 0b110X'XXXX -> 2-byte character + else if ((first_byte & 0xE0) == 0xC0) { + return 2; + } + // The first byte starts with 0b1110'XXXX -> 3-byte character + else if ((first_byte & 0xF0) == 0xE0) { + return 3; + } + // The first byte starts with 0b1111'0XXX -> 4-byte character + else if ((first_byte & 0xF8) == 0xF0) { + return 4; } - i = 0; - do { - char c = *p_begin; - IntType ci = 0; - if ('0' <= c && c <= '9') { - ci = IntType(c - '0'); - } - else if ('A' <= c && c <= 'F') { - ci = IntType(c - 'A' + 10); - } - else if ('a' <= c && c <= 'f') { - ci = IntType(c - 'a' + 10); - } - else { - return false; - } - i = i * IntType(16) + ci; - } while (++p_begin != p_end); - - return true; + // The first byte starts with 0b10XX'XXXX or 0b1111'1XXX -> invalid + throw fkyaml::invalid_encoding("Invalid UTF-8 encoding.", {first_byte}); } -// -// atoi() & itoa() -// +/// @brief Validates the encoding of a given byte array whose length is 1. +/// @param[in] byte_array The byte array to be validated. +/// @return true if a given byte array is valid, false otherwise. +inline bool validate(const std::initializer_list& byte_array) noexcept { + switch (byte_array.size()) { + case 1: + // U+0000..U+007F + return uint8_t(*(byte_array.begin())) <= uint8_t(0x7Fu); + case 2: { + auto itr = byte_array.begin(); + uint8_t first = *itr++; + uint8_t second = *itr; -/// @brief Converts a scalar into integers. This function executes bounds check to avoid overflow/underflow. -/// @tparam CharItr The type of char iterators. Its value type must be char (maybe cv-qualified). -/// @tparam IntType The output integer type. It can be either signed or unsigned. -/// @param begin The iterator to the first element of the scalar. -/// @param end The iterator to the past-the-end element of the scalar. -/// @param i The output integer value holder. -/// @return true if the conversion completes successfully, false otherwise. -template -inline bool atoi(CharItr begin, CharItr end, IntType& i) noexcept { - static_assert(is_iterator_of::value, "atoi() accepts iterators for char type"); - static_assert(is_non_bool_integral::value, "atoi() accepts non-boolean integral types as an output type"); + // U+0080..U+07FF + // 1st Byte: 0xC2..0xDF + // 2nd Byte: 0x80..0xBF + if (uint8_t(0xC2u) <= first && first <= uint8_t(0xDFu)) { + if (0x80 <= second && second <= 0xBF) { + return true; + } + } - if FK_YAML_UNLIKELY (begin == end) { + // The rest of byte combinations are invalid. return false; } + case 3: { + auto itr = byte_array.begin(); + uint8_t first = *itr++; + uint8_t second = *itr++; + uint8_t third = *itr; - uint32_t len = static_cast(std::distance(begin, end)); - const char* p_begin = &*begin; - const char* p_end = p_begin + len; - - char first = *begin; - if (first == '+') { - return atoi_dec_pos(p_begin + 1, p_end, i); - } - - if (first == '-') { - if (!std::numeric_limits::is_signed) { + // U+1000..U+CFFF: + // 1st Byte: 0xE0..0xEC + // 2nd Byte: 0x80..0xBF + // 3rd Byte: 0x80..0xBF + if (0xE0 <= first && first <= 0xEC) { + if (0x80 <= second && second <= 0xBF) { + if (0x80 <= third && third <= 0xBF) { + return true; + } + } return false; } - bool success = atoi_dec_neg(p_begin + 1, p_end, i); - if (success) { - i *= IntType(-1); + // U+D000..U+D7FF: + // 1st Byte: 0xED + // 2nd Byte: 0x80..0x9F + // 3rd Byte: 0x80..0xBF + if (first == 0xED) { + if (0x80 <= second && second <= 0x9F) { + if (0x80 <= third && third <= 0xBF) { + return true; + } + } + return false; } - return success; - } + // U+E000..U+FFFF: + // 1st Byte: 0xEE..0xEF + // 2nd Byte: 0x80..0xBF + // 3rd Byte: 0x80..0xBF + if (first == 0xEE || first == 0xEF) { + if (0x80 <= second && second <= 0xBF) { + if (0x80 <= third && third <= 0xBF) { + return true; + } + } + return false; + } - if (first != '0') { - return atoi_dec_pos(p_begin, p_end, i); + // The rest of byte combinations are invalid. + return false; } - else if (p_begin + 1 != p_end) { - switch (*(p_begin + 1)) { - case 'o': - return atoi_oct(p_begin + 2, p_end, i); - case 'x': - return atoi_hex(p_begin + 2, p_end, i); - default: - // The YAML spec doesn't allow decimals starting with 0. + case 4: { + auto itr = byte_array.begin(); + uint8_t first = *itr++; + uint8_t second = *itr++; + uint8_t third = *itr++; + uint8_t fourth = *itr; + + // U+10000..U+3FFFF: + // 1st Byte: 0xF0 + // 2nd Byte: 0x90..0xBF + // 3rd Byte: 0x80..0xBF + // 4th Byte: 0x80..0xBF + if (first == 0xF0) { + if (0x90 <= second && second <= 0xBF) { + if (0x80 <= third && third <= 0xBF) { + if (0x80 <= fourth && fourth <= 0xBF) { + return true; + } + } + } return false; } - } - i = 0; - return true; -} + // U+40000..U+FFFFF: + // 1st Byte: 0xF1..0xF3 + // 2nd Byte: 0x80..0xBF + // 3rd Byte: 0x80..0xBF + // 4th Byte: 0x80..0xBF + if (0xF1 <= first && first <= 0xF3) { + if (0x80 <= second && second <= 0xBF) { + if (0x80 <= third && third <= 0xBF) { + if (0x80 <= fourth && fourth <= 0xBF) { + return true; + } + } + } + return false; + } -/////////////////////////// -// scalar <--> float // -/////////////////////////// + // U+100000..U+10FFFF: + // 1st Byte: 0xF4 + // 2nd Byte: 0x80..0x8F + // 3rd Byte: 0x80..0xBF + // 4th Byte: 0x80..0xBF + if (first == 0xF4) { + if (0x80 <= second && second <= 0x8F) { + if (0x80 <= third && third <= 0xBF) { + if (0x80 <= fourth && fourth <= 0xBF) { + return true; + } + } + } + return false; + } -/// @brief Set an infinite `float` value based on the given signedness. -/// @param f The output `float` value holder. -/// @param sign Whether the infinite value should be positive or negative. -inline void set_infinity(float& f, const float sign) noexcept { - f = std::numeric_limits::infinity() * sign; + // The rest of byte combinations are invalid. + return false; + } + default: // LCOV_EXCL_LINE + return false; // LCOV_EXCL_LINE + } } -/// @brief Set an infinite `double` value based on the given signedness. -/// @param f The output `double` value holder. -/// @param sign Whether the infinite value should be positive or negative. -inline void set_infinity(double& f, const double sign) noexcept { - f = std::numeric_limits::infinity() * sign; -} +/// @brief Converts UTF-16 encoded characters to UTF-8 encoded bytes. +/// @param[in] utf16 UTF-16 encoded character(s). +/// @param[out] utf8 UTF-8 encoded bytes. +/// @param[out] consumed_size The number of UTF-16 encoded characters used for the conversion. +/// @param[out] encoded_size The size of UTF-encoded bytes. +inline void from_utf16( + std::array utf16, std::array& utf8, uint32_t& consumed_size, uint32_t& encoded_size) { + if (utf16[0] < char16_t(0x80u)) { + utf8[0] = static_cast(utf16[0] & 0x7Fu); + consumed_size = 1; + encoded_size = 1; + return; + } + else if (utf16[0] <= char16_t(0x7FFu)) { + uint16_t utf8_chunk = static_cast(0xC080u) | static_cast((utf16[0] & 0x07C0u) << 2) | + static_cast(utf16[0] & 0x003Fu); + utf8[0] = static_cast((utf8_chunk & 0xFF00u) >> 8); + utf8[1] = static_cast(utf8_chunk & 0x00FFu); + consumed_size = 1; + encoded_size = 2; + return; + } + else if (utf16[0] < char16_t(0xD800u) || char16_t(0xE000u) <= utf16[0]) { + uint32_t utf8_chunk = static_cast(0xE08080u) | static_cast((utf16[0] & 0xF000u) << 4) | + static_cast((utf16[0] & 0x0FC0u) << 2) | + static_cast(utf16[0] & 0x003Fu); + utf8[0] = static_cast((utf8_chunk & 0xFF0000u) >> 16); + utf8[1] = static_cast((utf8_chunk & 0x00FF00u) >> 8); + utf8[2] = static_cast(utf8_chunk & 0x0000FFu); + consumed_size = 1; + encoded_size = 3; + return; + } + else if (utf16[0] <= char16_t(0xDBFFu) && char16_t(0xDC00u) <= utf16[1] && utf16[1] <= char16_t(0xDFFFu)) { + // for surrogate pairs + uint32_t code_point = 0x10000u + ((utf16[0] & 0x03FFu) << 10) + (utf16[1] & 0x03FFu); + uint32_t utf8_chunk = + static_cast(0xF0808080u) | static_cast((code_point & 0x1C0000u) << 6) | + static_cast((code_point & 0x03F000u) << 4) | + static_cast((code_point & 0x000FC0u) << 2) | static_cast(code_point & 0x00003Fu); + utf8[0] = static_cast((utf8_chunk & 0xFF000000u) >> 24); + utf8[1] = static_cast((utf8_chunk & 0x00FF0000u) >> 16); + utf8[2] = static_cast((utf8_chunk & 0x0000FF00u) >> 8); + utf8[3] = static_cast(utf8_chunk & 0x000000FFu); + consumed_size = 2; + encoded_size = 4; + return; + } -/// @brief Set a NaN `float` value. -/// @param f The output `float` value holder. -inline void set_nan(float& f) noexcept { - f = std::nanf(""); + throw invalid_encoding("Invalid UTF-16 encoding detected.", utf16); } -/// @brief Set a NaN `double` value. -/// @param f The output `double` value holder. -inline void set_nan(double& f) noexcept { - f = std::nan(""); +/// @brief Converts a UTF-32 encoded character to UTF-8 encoded bytes. +/// @param[in] utf32 A UTF-32 encoded character. +/// @param[out] utf8 UTF-8 encoded bytes. +/// @param[in] encoded_size The size of UTF-encoded bytes. +inline void from_utf32(const char32_t utf32, std::array& utf8, uint32_t& encoded_size) { + if (utf32 < char32_t(0x80u)) { + utf8[0] = static_cast(utf32 & 0x007F); + encoded_size = 1; + return; + } + else if (utf32 <= char32_t(0x7FFu)) { + uint16_t utf8_chunk = static_cast(0xC080u) | static_cast((utf32 & 0x07C0u) << 2) | + static_cast(utf32 & 0x003Fu); + utf8[0] = static_cast((utf8_chunk & 0xFF00u) >> 8); + utf8[1] = static_cast(utf8_chunk & 0x00FFu); + encoded_size = 2; + return; + } + else if (utf32 <= char32_t(0xFFFFu)) { + uint32_t utf8_chunk = static_cast(0xE08080u) | static_cast((utf32 & 0xF000u) << 4) | + static_cast((utf32 & 0x0FC0u) << 2) | static_cast(utf32 & 0x003F); + utf8[0] = static_cast((utf8_chunk & 0xFF0000u) >> 16); + utf8[1] = static_cast((utf8_chunk & 0x00FF00u) >> 8); + utf8[2] = static_cast(utf8_chunk & 0x0000FFu); + encoded_size = 3; + return; + } + else if (utf32 <= char32_t(0x10FFFFu)) { + uint32_t utf8_chunk = static_cast(0xF0808080u) | static_cast((utf32 & 0x1C0000u) << 6) | + static_cast((utf32 & 0x03F000u) << 4) | + static_cast((utf32 & 0x000FC0u) << 2) | + static_cast(utf32 & 0x00003Fu); + utf8[0] = static_cast((utf8_chunk & 0xFF000000u) >> 24); + utf8[1] = static_cast((utf8_chunk & 0x00FF0000u) >> 16); + utf8[2] = static_cast((utf8_chunk & 0x0000FF00u) >> 8); + utf8[3] = static_cast(utf8_chunk & 0x000000FFu); + encoded_size = 4; + return; + } + + throw invalid_encoding("Invalid UTF-32 encoding detected.", utf32); } -#if FK_YAML_HAS_TO_CHARS +} // namespace utf8 -/// @brief Converts a scalar into a floating point value. -/// @warning `p_begin` and `p_end` must not be null. Validate them before calling this function. -/// @param p_begin The pointer to the first element of the scalar. -/// @param p_end The pointer to the past-the-end element of the scalar. -/// @param f The output floating point value holder. -/// @return true if the conversion completes successfully, false otherwise. -template -inline bool atof_impl(const char* p_begin, const char* p_end, FloatType& f) noexcept { - static_assert(std::is_floating_point_v, "atof_impl() accepts floating point types as an output type"); - if (auto [ptr, ec] = std::from_chars(p_begin, p_end, f); ec == std::errc {}) { - return ptr == p_end; - } - return false; -} +FK_YAML_DETAIL_NAMESPACE_END -#else +#endif /* FK_YAML_DETAIL_ENCODINGS_UTF_ENCODINGS_HPP */ -/// @brief Converts a scalar into a `float` value. -/// @warning `p_begin` and `p_end` must not be null. Validate them before calling this function. -/// @param p_begin The pointer to the first element of the scalar. -/// @param p_end The pointer to the past-the-end element of the scalar. -/// @param f The output `float` value holder. -/// @return true if the conversion completes successfully, false otherwise. -inline bool atof_impl(const char* p_begin, const char* p_end, float& f) { - std::size_t idx = 0; - f = std::stof(std::string(p_begin, p_end), &idx); - return idx == static_cast(p_end - p_begin); -} +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -/// @brief Converts a scalar into a `double` value. -/// @warning `p_begin` and `p_end` must not be null. Validate them before calling this function. -/// @param p_begin The pointer to the first element of the scalar. -/// @param p_end The pointer to the past-the-end element of the scalar. -/// @param f The output `double` value holder. -/// @return true if the conversion completes successfully, false otherwise. -inline bool atof_impl(const char* p_begin, const char* p_end, double& f) { - std::size_t idx = 0; - f = std::stod(std::string(p_begin, p_end), &idx); - return idx == static_cast(p_end - p_begin); -} +#ifndef FK_YAML_DETAIL_INPUT_BLOCK_SCALAR_HEADER_HPP +#define FK_YAML_DETAIL_INPUT_BLOCK_SCALAR_HEADER_HPP -#endif // FK_YAML_HAS_TO_CHARS +#include -/// @brief Converts a scalar into a floating point value. -/// @tparam CharItr The type of char iterators. Its value type must be char (maybe cv-qualified). -/// @tparam FloatType The output floatint point value type. -/// @param begin The iterator to the first element of the scalar. -/// @param end The iterator to the past-the-end element of the scalar. -/// @param f The output floating point value holder. -/// @return true if the conversion completes successfully, false otherwise. -template -inline bool atof(CharItr begin, CharItr end, FloatType& f) noexcept(noexcept(atof_impl(&*begin, &*begin, f))) { - static_assert(is_iterator_of::value, "atof() accepts iterators for char type"); - static_assert(std::is_floating_point::value, "atof() accepts floating point types as an output type"); +// #include - if FK_YAML_UNLIKELY (begin == end) { - return false; - } - uint32_t len = static_cast(std::distance(begin, end)); - const char* p_begin = &*begin; - const char* p_end = p_begin + len; +FK_YAML_DETAIL_NAMESPACE_BEGIN - if (*p_begin == '-' || *p_begin == '+') { - if (len == 5) { - const char* p_from_second = p_begin + 1; - bool is_inf_scalar = (std::strncmp(p_from_second, ".inf", 4) == 0) || - (std::strncmp(p_from_second, ".Inf", 4) == 0) || - (std::strncmp(p_from_second, ".INF", 4) == 0); +/// @brief Definition of chomping indicator types. +enum class chomping_indicator_t { + STRIP, //!< excludes final line breaks and trailing empty lines indicated by `-`. + CLIP, //!< preserves final line breaks but excludes trailing empty lines. no indicator means this type. + KEEP, //!< preserves final line breaks and trailing empty lines indicated by `+`. +}; - if (is_inf_scalar) { - set_infinity(f, *p_begin == '-' ? FloatType(-1.) : FloatType(1.)); - return true; - } - } - } - else if (len == 4) { - bool is_inf_scalar = (std::strncmp(p_begin, ".inf", 4) == 0) || (std::strncmp(p_begin, ".Inf", 4) == 0) || - (std::strncmp(p_begin, ".INF", 4) == 0); - bool is_nan_scalar = false; - if (!is_inf_scalar) { - is_nan_scalar = (std::strncmp(p_begin, ".nan", 4) == 0) || (std::strncmp(p_begin, ".NaN", 4) == 0) || - (std::strncmp(p_begin, ".NAN", 4) == 0); - } - - if (is_inf_scalar) { - set_infinity(f, FloatType(1.)); - return true; - } - - if (is_nan_scalar) { - set_nan(f); - return true; - } - } - -#if FK_YAML_HAS_TO_CHARS - return atof_impl(p_begin, p_end, f); -#else - bool success = false; - try { - success = atof_impl(p_begin, p_end, f); - } - catch (const std::exception& /*unused*/) { - success = false; - } - - return success; -#endif -} +/// @brief Block scalar header information. +struct block_scalar_header { + /// Chomping indicator type. + chomping_indicator_t chomp {chomping_indicator_t::CLIP}; + /// Indentation for block scalar contents. + uint32_t indent {0}; +}; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_CONVERSIONS_SCALAR_CONV_HPP_ */ +#endif /* FK_YAML_DETAIL_INPUT_BLOCK_SCALAR_HEADER_HPP */ -// #include +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -// #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_INPUT_LEXICAL_ANALIZER_HPP_ -#define FK_YAML_DETAIL_INPUT_LEXICAL_ANALIZER_HPP_ +#ifndef FK_YAML_DETAIL_INPUT_POSITION_TRACKER_HPP +#define FK_YAML_DETAIL_INPUT_POSITION_TRACKER_HPP #include -#include -#include // #include -// #include +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT -// #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_ENCODINGS_URI_ENCODING_HPP_ -#define FK_YAML_DETAIL_ENCODINGS_URI_ENCODING_HPP_ +#ifndef FK_YAML_DETAIL_STR_VIEW_HPP +#define FK_YAML_DETAIL_STR_VIEW_HPP -#include +#include #include // #include +// #include -FK_YAML_DETAIL_NAMESPACE_BEGIN +// #include -/// @brief A class which handles URI encodings. -class uri_encoding { -public: - /// @brief Validates the encoding of the given character sequence. - /// @param begin An iterator to the first element of the character sequence. - /// @param end An iterator to the past-the-end element of the character sequence. - /// @return true if all the characters are valid, false otherwise. - static bool validate(const char* begin, const char* end) noexcept { - if (begin == end) { - return true; - } +// #include - const char* current = begin; - for (; current != end; ++current) { - if (*current == '%') { - bool are_valid_octets = validate_octets(++current, end); - if (!are_valid_octets) { - return false; - } +FK_YAML_DETAIL_NAMESPACE_BEGIN - continue; - } +/// @brief Non owning view into constant character sequence. +/// @note +/// This class is a minimal implementation of std::basic_string_view which has been available since C++17 +/// but pretty useful and efficient for referencing/investigating character sequences. +/// @warning +/// This class intentionally omits a lot of value checks to improve efficiency. Necessary checks should be +/// made before calling this class' APIs for safety. +/// @tparam CharT Character type +/// @tparam Traits Character traits type which defaults to std::char_traits. +template > +class basic_str_view { + static_assert(!std::is_array::value, "CharT must not be an array type."); + static_assert( + std::is_trivial::value && std::is_standard_layout::value, + "CharT must be a trivial, standard layout type."); + static_assert( + std::is_same::value, "CharT & Traits::char_type must be the same type."); - bool is_allowed_character = validate_character(*current); - if (!is_allowed_character) { - return false; - } - } +public: + /// Character traits type. + using traits_type = Traits; + /// Character type. + using value_type = CharT; + /// Pointer type to a character. + using pointer = value_type*; + /// Constant pointer type to a character. + using const_pointer = const value_type*; + /// Reference type to a character. + using reference = value_type&; + /// Constant reference type to a character. + using const_reference = const value_type&; + /// Constant iterator type to a character. + using const_iterator = const value_type*; + /// Iterator type to a character. + /// (Always constant since this class isn't meant to provide any mutating features.) + using iterator = const_iterator; + /// Constant reverse iterator type to a character. + using const_reverse_iterator = std::reverse_iterator; + /// Reverse iterator type to a character. + /// (Always constant since this class isn't meant to provide any mutating features.) + using reverse_iterator = const_reverse_iterator; + /// Size type for character sequence sizes. + using size_type = std::size_t; + /// Difference type for distances between characters. + using difference_type = std::ptrdiff_t; - return true; - } + /// Invalid position value. + static constexpr size_type npos = static_cast(-1); -private: - /// @brief Validates the given octets. - /// @param begin An iterator to the first octet. - /// @param end An iterator to the past-the-end element of the whole character sequence. - /// @return true if the octets are valid, false otherwise. - static bool validate_octets(const char*& begin, const char*& end) { - for (int i = 0; i < 2; i++, ++begin) { - if (begin == end) { - return false; - } + /// Constructs a basic_str_view object. + constexpr basic_str_view() noexcept = default; - // Normalize a character for a-f/A-F comparison - int octet = std::tolower(*begin); + /// Destroys a basic_str_view object. + ~basic_str_view() noexcept = default; - if ('0' <= octet && octet <= '9') { - continue; - } + /// @brief Copy constructs a basic_str_view object. + /// @param _ A basic_str_view object to copy from. + constexpr basic_str_view(const basic_str_view&) noexcept = default; - if ('a' <= octet && octet <= 'f') { - continue; - } + /// @brief Move constructs a basic_str_view object. + /// @param _ A basic_str_view object to move from. + constexpr basic_str_view(basic_str_view&&) noexcept = default; - return false; - } + /// @brief Constructs a basic_str_view object from a pointer to a character sequence. + /// @note std::char_traits::length() is constexpr from C++17. + /// @param p_str A pointer to a character sequence. (Must be null-terminated, or an undefined behavior.) + template < + typename CharPtrT, + enable_if_t< + disjunction, std::is_same>::value, int> = + 0> + FK_YAML_CXX17_CONSTEXPR basic_str_view(CharPtrT p_str) noexcept + : m_len(traits_type::length(p_str)), + mp_str(p_str) { + } - return true; + /// @brief Constructs a basic_str_view object from a C-style char array. + /// @note + /// This constructor assumes the last element is the null character ('\0'). If that's not desirable, consider using + /// one of the other overloads. + /// @tparam N The size of a C-style char array. + /// @param str A C-style char array. (Must be null-terminated) + template + constexpr basic_str_view(const value_type (&str)[N]) noexcept + : m_len(N - 1), + mp_str(&str[0]) { } - /// @brief Verify if the given character is allowed as a URI character. - /// @param c The target character. - /// @return true if the given character is allowed as a URI character, false otherwise. - static bool validate_character(char c) { - // Check if the current character is one of reserved/unreserved characters which are allowed for - // use. See the following links for details: - // * reserved characters: https://datatracker.ietf.org/doc/html/rfc3986#section-2.2 - // * unreserved characters: https://datatracker.ietf.org/doc/html/rfc3986#section-2.3 + /// @brief Construction from a null pointer is forbidden. + basic_str_view(std::nullptr_t) = delete; - switch (c) { - // reserved characters (gen-delims) - case ':': - case '/': - case '?': - case '#': - case '[': - case ']': - case '@': - // reserved characters (sub-delims) - case '!': - case '$': - case '&': - case '\'': - case '(': - case ')': - case '*': - case '+': - case ',': - case ';': - case '=': - // unreserved characters - case '-': - case '.': - case '_': - case '~': - return true; - default: - // alphabets and numbers are also allowed. - return std::isalnum(c); - } + /// @brief Constructs a basic_str_view object from a pointer to a character sequence and its size. + /// @param p_str A pointer to a character sequence. (May or may not be null-terminated.) + /// @param len The length of a character sequence. + constexpr basic_str_view(const value_type* p_str, size_type len) noexcept + : m_len(len), + mp_str(p_str) { } -}; - -FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_ENCODINGS_URI_ENCODING_HPP_ */ + /// @brief Constructs a basic_str_view object from compatible begin/end iterators + /// @tparam ItrType Iterator type to a character. + /// @param first The iterator to the first element of a character sequence. + /// @param last The iterator to the past-the-end of a character sequence. + template < + typename ItrType, + enable_if_t< + conjunction< + is_iterator_of, + std::is_base_of< + std::random_access_iterator_tag, typename std::iterator_traits::iterator_category>>::value, + int> = 0> + basic_str_view(ItrType first, ItrType last) noexcept + : m_len(last - first), + mp_str(&*first) { + } -// #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_ENCODINGS_UTF_ENCODINGS_HPP_ -#define FK_YAML_DETAIL_ENCODINGS_UTF_ENCODINGS_HPP_ + /// @brief Constructs a basic_str_view object from a compatible std::basic_string object. + /// @param str A compatible character sequence container. + basic_str_view(const std::basic_string& str) noexcept + : m_len(str.length()), + mp_str(str.data()) { + } -#include -#include + /// @brief Copy assignment operator for this basic_str_view class. + /// @param _ A basic_str_view object to copy from. + /// @return Reference to this basic_str_view object. + basic_str_view& operator=(const basic_str_view&) noexcept = default; -// #include + /// @brief Move assignment operator for this basic_str_view class. + /// @param _ A basic_str_view object to move from. + /// @return Reference to this basic_str_view object. + basic_str_view& operator=(basic_str_view&&) noexcept = default; -// #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_EXCEPTION_HPP_ -#define FK_YAML_EXCEPTION_HPP_ + /// @brief Get the iterator to the first element. (Always constant) + /// @return The iterator to the first element. + const_iterator begin() const noexcept { + return mp_str; + } -#include -#include -#include -#include + /// @brief Get the iterator to the past-the-end element. (Always constant) + /// @return The iterator to the past-the-end element. + const_iterator end() const noexcept { + return mp_str + m_len; + } -// #include - -// #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_STRING_FORMATTER_HPP_ -#define FK_YAML_DETAIL_STRING_FORMATTER_HPP_ - -#include -#include -#include -#include - -// #include + /// @brief Get the iterator to the first element. (Always constant) + /// @return The iterator to the first element. + const_iterator cbegin() const noexcept { + return mp_str; + } + /// @brief Get the iterator to the past-the-end element. (Always constant) + /// @return The iterator to the past-the-end element. + const_iterator cend() const noexcept { + return mp_str + m_len; + } -FK_YAML_DETAIL_NAMESPACE_BEGIN + /// @brief Get the iterator to the first element in the reverse order. (Always constant) + /// @return The iterator to the first element in the reverse order. + const_reverse_iterator rbegin() const noexcept { + return const_reverse_iterator(end()); + } -inline std::string format(const char* fmt, ...) { - va_list vl; - va_start(vl, fmt); - int size = std::vsnprintf(nullptr, 0, fmt, vl); - va_end(vl); + /// @brief Get the iterator to the past-the-end element in the reverse order. (Always constant) + /// @return The iterator to the past-the-end element in the reverse order. + const_reverse_iterator rend() const noexcept { + return const_reverse_iterator(begin()); + } - // LCOV_EXCL_START - if (size < 0) { - return ""; + /// @brief Get the iterator to the first element in the reverse order. (Always constant) + /// @return The iterator to the first element in the reverse order. + const_reverse_iterator crbegin() const noexcept { + return const_reverse_iterator(end()); } - // LCOV_EXCL_STOP - std::unique_ptr buffer {new char[size + 1] {}}; + /// @brief Get the iterator to the past-the-end element in the reverse order. (Always constant) + /// @return The iterator to the past-the-end element in the reverse order. + const_reverse_iterator crend() const noexcept { + return const_reverse_iterator(begin()); + } - va_start(vl, fmt); - size = std::vsnprintf(buffer.get(), size + 1, fmt, vl); - va_end(vl); + /// @brief Get the size of the referenced character sequence. + /// @return The size of the referenced character sequence. + size_type size() const noexcept { + return m_len; + } - return std::string(buffer.get(), size); -} + /// @brief Get the size of the referenced character sequence. + /// @return The size of the referenced character sequence. + size_type length() const noexcept { + return m_len; + } -FK_YAML_DETAIL_NAMESPACE_END + /// @brief Get the maximum number of the character sequence size. + /// @return The maximum number of the character sequence size. + constexpr size_type max_size() const noexcept { + return static_cast(std::numeric_limits::max()); + } -#endif /* FK_YAML_DETAIL_STRING_FORMATTER_HPP_ */ + /// @brief Checks if the referenced character sequence is empty. + /// @return true if empty, false otherwise. + bool empty() const noexcept { + return m_len == 0; + } -// #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_TYPES_NODE_T_HPP_ -#define FK_YAML_DETAIL_TYPES_NODE_T_HPP_ + /// @brief Get the element at the given position. + /// @param pos The position of the target element. + /// @return The element at the given position. + const_reference operator[](size_type pos) const noexcept { + return *(mp_str + pos); + } -#include -#include + /// @brief Get the element at the given position with bounds checks. + /// @warning Throws an fkyaml::out_of_range exception if the position exceeds the character sequence size. + /// @param pos The position of the target element. + /// @return The element at the given position. + const_reference at(size_type pos) const { + if FK_YAML_UNLIKELY (pos >= m_len) { + throw fkyaml::out_of_range(static_cast(pos)); + } + return *(mp_str + pos); + } -// #include + /// @brief Get the first element. + /// @return The first element. + const_reference front() const noexcept { + return *mp_str; + } -// #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_NODE_TYPE_HPP_ -#define FK_YAML_NODE_TYPE_HPP_ + /// @brief Get the last element. + /// @return The last element. + const_reference back() const { + return *(mp_str + m_len - 1); + } -#include + /// @brief Get the pointer to the raw data of referenced character sequence. + /// @return The pointer to the raw data of referenced character sequence. + const_pointer data() const noexcept { + return mp_str; + } -// #include + /// @brief Moves the beginning position by `n` elements. + /// @param n The number of elements by which to move the beginning position. + void remove_prefix(size_type n) noexcept { + mp_str += n; + m_len -= n; + } + /// @brief Shrinks the referenced character sequence from the last by `n` elements. + /// @param n The number of elements by which to shrink the sequence from the last. + void remove_suffix(size_type n) noexcept { + m_len -= n; + } -FK_YAML_NAMESPACE_BEGIN + /// @brief Swaps data with the given basic_str_view object. + /// @param other A basic_str_view object to swap data with. + void swap(basic_str_view& other) noexcept { + auto tmp = *this; + *this = other; + other = tmp; + } -enum class node_type : std::uint32_t { - SEQUENCE, //!< sequence value type - MAPPING, //!< mapping value type - NULL_OBJECT, //!< null value type - BOOLEAN, //!< boolean value type - INTEGER, //!< integer value type - FLOAT, //!< float point value type - STRING, //!< string value type -}; + /// @brief Copys the referenced character sequence values from `pos` by `n` size. + /// @warning Throws an fkyaml::out_of_range exception if the given `pos` is bigger than the length. + /// @param p_str The pointer to a character sequence buffer for output. + /// @param n The number of elements to write into `p_str`. + /// @param pos The offset of the beginning position to copy values. + /// @return The number of elements to be written into `p_str`. + size_type copy(CharT* p_str, size_type n, size_type pos = 0) const { + if FK_YAML_UNLIKELY (pos > m_len) { + throw fkyaml::out_of_range(static_cast(pos)); + } + const size_type rlen = std::min(n, m_len - pos); + traits_type::copy(p_str, mp_str + pos, rlen); + return rlen; + } -inline const char* to_string(node_type t) noexcept { - switch (t) { - case node_type::SEQUENCE: - return "SEQUENCE"; - case node_type::MAPPING: - return "MAPPING"; - case node_type::NULL_OBJECT: - return "NULL_OBJECT"; - case node_type::BOOLEAN: - return "BOOLEAN"; - case node_type::INTEGER: - return "INTEGER"; - case node_type::FLOAT: - return "FLOAT"; - case node_type::STRING: - return "STRING"; - default: // LCOV_EXCL_LINE - return ""; // LCOV_EXCL_LINE + /// @brief Constructs a sub basic_str_view object from `pos` by `n` size. + /// @warning Throws an fkyaml::out_of_range exception if the given `pos` is bigger than the length. + /// @param pos The offset of the beginning position. + /// @param n The number of elements to the end of a new sub basic_str_view object. + /// @return A newly created sub basic_str_view object. + basic_str_view substr(size_type pos = 0, size_type n = npos) const { + if FK_YAML_UNLIKELY (pos > m_len) { + throw fkyaml::out_of_range(static_cast(pos)); + } + const size_type rlen = std::min(n, m_len - pos); + return basic_str_view(mp_str + pos, rlen); } -} -FK_YAML_NAMESPACE_END + /// @brief Compares the referenced character sequence values with the given basic_str_view object. + /// @param sv The basic_str_view object to compare with. + /// @return The lexicographical comparison result. The values are same as std::strncmp(). + int compare(basic_str_view sv) const noexcept { + const size_type rlen = std::min(m_len, sv.m_len); + int ret = traits_type::compare(mp_str, sv.mp_str, rlen); -#endif /* FK_YAML_NODE_TYPE_HPP_ */ + if (ret == 0) { + using int_limits = std::numeric_limits; + difference_type diff = + m_len > sv.m_len ? m_len - sv.m_len : difference_type(-1) * difference_type(sv.m_len - m_len); + if (diff > int_limits::max()) { + ret = int_limits::max(); + } + else if (diff < int_limits::min()) { + ret = int_limits::min(); + } + else { + ret = static_cast(diff); + } + } -FK_YAML_DETAIL_NAMESPACE_BEGIN + return ret; + } -/// @brief Definition of node value types. -enum class node_t : std::uint32_t { - SEQUENCE, //!< sequence value type - MAPPING, //!< mapping value type - NULL_OBJECT, //!< null value type - BOOLEAN, //!< boolean value type - INTEGER, //!< integer value type - FLOAT_NUMBER, //!< float number value type - STRING, //!< string value type -}; + /// @brief Compares the referenced character sequence values from `pos1` by `n1` characters with `sv`. + /// @param pos1 The offset of the beginning element. + /// @param n1 The length of character sequence used for comparison. + /// @param sv A basic_str_view object to compare with. + /// @return The lexicographical comparison result. The values are same as std::strncmp(). + int compare(size_type pos1, size_type n1, basic_str_view sv) const { + return substr(pos1, n1).compare(sv); + } -inline const char* to_string(node_t t) noexcept { - switch (t) { - case node_t::SEQUENCE: - return "sequence"; - case node_t::MAPPING: - return "mapping"; - case node_t::NULL_OBJECT: - return "null"; - case node_t::BOOLEAN: - return "boolean"; - case node_t::INTEGER: - return "integer"; - case node_t::FLOAT_NUMBER: - return "float"; - case node_t::STRING: - return "string"; - default: // LCOV_EXCL_LINE - return ""; // LCOV_EXCL_LINE + /// @brief Compares the referenced character sequence value from `pos1` by `n1` characters with `sv` from `pos2` by + /// `n2` characters. + /// @param pos1 The offset of the beginning element in this character sequence. + /// @param n1 The length of this character sequence used for comparison. + /// @param sv A basic_str_view object to compare with. + /// @param pos2 The offset of the beginning element in `sv`. + /// @param n2 The length of `sv` used for comparison. + /// @return The lexicographical comparison result. The values are same as std::strncmp(). + int compare(size_type pos1, size_type n1, basic_str_view sv, size_type pos2, size_type n2) const { + return substr(pos1, n1).compare(sv.substr(pos2, n2)); } -} -inline node_t convert_from_node_type(node_type t) { - switch (t) { - case node_type::SEQUENCE: - return node_t::SEQUENCE; - case node_type::MAPPING: - return node_t::MAPPING; - case node_type::NULL_OBJECT: - return node_t::NULL_OBJECT; - case node_type::BOOLEAN: - return node_t::BOOLEAN; - case node_type::INTEGER: - return node_t::INTEGER; - case node_type::FLOAT: - return node_t::FLOAT_NUMBER; - case node_type::STRING: - return node_t::STRING; - default: // LCOV_EXCL_LINE - return node_t::NULL_OBJECT; // LCOV_EXCL_LINE + /// @brief Compares the referenced character sequence with `s` character sequence. + /// @param s The pointer to a character sequence to compare with. + /// @return The lexicographical comparison result. The values are same as std::strncmp(). + int compare(const CharT* s) const { + return compare(basic_str_view(s)); } -} -inline node_type convert_to_node_type(node_t t) { - switch (t) { - case node_t::SEQUENCE: - return node_type::SEQUENCE; - case node_t::MAPPING: - return node_type::MAPPING; - case node_t::NULL_OBJECT: - return node_type::NULL_OBJECT; - case node_t::BOOLEAN: - return node_type::BOOLEAN; - case node_t::INTEGER: - return node_type::INTEGER; - case node_t::FLOAT_NUMBER: - return node_type::FLOAT; - case node_t::STRING: - return node_type::STRING; - default: // LCOV_EXCL_LINE - return node_type::NULL_OBJECT; // LCOV_EXCL_LINE + /// @brief Compares the referenced character sequence from `pos1` by `n1` characters with `s` character sequence. + /// @param pos1 The offset of the beginning element in this character sequence. + /// @param n1 The length of this character sequence used fo comparison. + /// @param s The pointer to a character sequence to compare with. + /// @return The lexicographical comparison result. The values are same as std::strncmp(). + int compare(size_type pos1, size_type n1, const CharT* s) const { + return substr(pos1, n1).compare(basic_str_view(s)); } -} -FK_YAML_DETAIL_NAMESPACE_END - -#endif /* FK_YAML_DETAIL_TYPES_NODE_T_HPP_ */ - - -FK_YAML_NAMESPACE_BEGIN - -/// @brief A base exception class used in fkYAML library. -/// @sa https://fktn-k.github.io/fkYAML/api/exception/ -class exception : public std::exception { -public: - /// @brief Construct a new exception object without any error messages. - /// @sa https://fktn-k.github.io/fkYAML/api/exception/constructor/ - exception() = default; - - /// @brief Construct a new exception object with an error message. - /// @param[in] msg An error message. - /// @sa https://fktn-k.github.io/fkYAML/api/exception/constructor/ - explicit exception(const char* msg) noexcept { - if (msg) { - m_error_msg = msg; - } + /// @brief Compares the referenced character sequence from `pos1` by `n1` characters with `s` character sequence by + /// `n2` characters. + /// @param pos1 The offset of the beginning element in this character sequence. + /// @param n1 The length of this character sequence used fo comparison. + /// @param s The pointer to a character sequence to compare with. + /// @param n2 The length of `s` used fo comparison. + /// @return + int compare(size_type pos1, size_type n1, const CharT* s, size_type n2) const { + return substr(pos1, n1).compare(basic_str_view(s, n2)); } -public: - /// @brief Returns an error message internally held. If nothing, a non-null, empty string will be returned. - /// @return An error message internally held. The message might be empty. - /// @sa https://fktn-k.github.io/fkYAML/api/exception/what/ - const char* what() const noexcept override { - return m_error_msg.c_str(); + /// @brief Checks if this character sequence starts with `sv` characters. + /// @param sv The character sequence to compare with. + /// @return true if the character sequence starts with `sv` characters, false otherwise. + bool starts_with(basic_str_view sv) const noexcept { + return substr(0, sv.size()) == sv; } -private: - /// An error message holder. - std::string m_error_msg {}; -}; - -/// @brief An exception class indicating an encoding error. -/// @sa https://fktn-k.github.io/fkYAML/api/exception/invalid_encoding/ -class invalid_encoding : public exception { -public: - /// @brief Construct a new invalid_encoding object for UTF-8 related errors. - /// @param msg An error message. - /// @param u8 The UTF-8 character bytes. - explicit invalid_encoding(const char* msg, const std::initializer_list& u8) noexcept - : exception(generate_error_message(msg, u8).c_str()) { + /// @brief Checks if this character sequence starts with `c` character. + /// @param c The character to compare with. + /// @return true if the character sequence starts with `c` character, false otherwise. + bool starts_with(CharT c) const noexcept { + return !empty() && traits_type::eq(front(), c); } - /// @brief Construct a new invalid_encoding object for UTF-16 related errors. - /// @param msg An error message. - /// @param u16_h The first UTF-16 encoded element used for the UTF-8 encoding. - /// @param u16_l The second UTF-16 encoded element used for the UTF-8 encoding. - explicit invalid_encoding(const char* msg, std::array u16) noexcept - : exception(generate_error_message(msg, u16).c_str()) { + /// @brief Checks if this character sequence starts with `s` characters. + /// @param s The character sequence to compare with. + /// @return true if the character sequence starts with `s` characters, false otherwise. + bool starts_with(const CharT* s) const noexcept { + return starts_with(basic_str_view(s)); } - /// @brief Construct a new invalid_encoding object for UTF-32 related errors. - /// @param msg An error message. - /// @param u32 The UTF-32 encoded element used for the UTF-8 encoding. - explicit invalid_encoding(const char* msg, char32_t u32) noexcept - : exception(generate_error_message(msg, u32).c_str()) { + /// @brief Checks if this character sequence ends with `sv` characters. + /// @param sv The character sequence to compare with. + /// @return true if the character sequence ends with `sv` characters, false otherwise. + bool ends_with(basic_str_view sv) const noexcept { + const size_type size = m_len; + const size_type sv_size = sv.size(); + return size >= sv_size && traits_type::compare(end() - sv_size, sv.data(), sv_size) == 0; } -private: - std::string generate_error_message(const char* msg, const std::initializer_list& u8) const noexcept { - auto itr = u8.begin(); - auto end_itr = u8.end(); - std::string formatted = detail::format("invalid_encoding: %s in=[ 0x%02x", msg, *itr++); - while (itr != end_itr) { - formatted += detail::format(", 0x%02x", *itr++); - } - formatted += " ]"; - return formatted; + /// @brief Checks if this character sequence ends with `c` character. + /// @param c The character to compare with. + /// @return true if the character sequence ends with `c` character, false otherwise. + bool ends_with(CharT c) const noexcept { + return !empty() && traits_type::eq(back(), c); } - /// @brief Generate an error message from the given parameters for the UTF-16 encoding. - /// @param msg An error message. - /// @param h The first UTF-16 encoded element used for the UTF-8 encoding. - /// @param l The second UTF-16 encoded element used for the UTF-8 encoding. - /// @return A generated error message. - std::string generate_error_message(const char* msg, std::array u16) const noexcept { - // uint16_t is large enough for UTF-16 encoded elements. - return detail::format("invalid_encoding: %s in=[ 0x%04x, 0x%04x ]", msg, uint16_t(u16[0]), uint16_t(u16[1])); + /// @brief Checks if this character sequence ends with `s` characters. + /// @param s The character sequence to compare with. + /// @return true if the character sequence ends with `s` characters, false otherwise. + bool ends_with(const CharT* s) const noexcept { + return ends_with(basic_str_view(s)); } - /// @brief Generate an error message from the given parameters for the UTF-32 encoding. - /// @param msg An error message. - /// @param u32 The UTF-32 encoded element used for the UTF-8 encoding. - /// @return A genereated error message. - std::string generate_error_message(const char* msg, char32_t u32) const noexcept { - // uint32_t is large enough for UTF-32 encoded elements. - return detail::format("invalid_encoding: %s in=0x%08x", msg, uint32_t(u32)); + /// @brief Checks if this character sequence contains `sv` characters. + /// @param sv The character sequence to compare with. + /// @return true if the character sequence contains `sv` characters, false otherwise. + bool contains(basic_str_view sv) const noexcept { + return find(sv) != npos; } -}; -/// @brief An exception class indicating an error in parsing. -class parse_error : public exception { -public: - explicit parse_error(const char* msg, uint32_t lines, uint32_t cols_in_line) noexcept - : exception(generate_error_message(msg, lines, cols_in_line).c_str()) { + /// @brief Checks if this character sequence contains `c` character. + /// @param c The character to compare with. + /// @return true if the character sequence contains `c` character, false otherwise. + bool contains(CharT c) const noexcept { + return find(c) != npos; } -private: - std::string generate_error_message(const char* msg, uint32_t lines, uint32_t cols_in_line) const noexcept { - return detail::format("parse_error: %s (at line %u, column %u)", msg, lines, cols_in_line); + /// @brief Checks if this character sequence contains `s` characters. + /// @param s The character sequence to compare with. + /// @return true if the character sequence contains `s` characters, false otherwise. + bool contains(const CharT* s) const noexcept { + return find(s) != npos; } -}; -/// @brief An exception class indicating an invalid type conversion. -/// @sa https://fktn-k.github.io/fkYAML/api/exception/type_error/ -class type_error : public exception { -public: - /// @brief Construct a new type_error object with an error message and a node type. - /// @param[in] msg An error message. - /// @param[in] type The type of a source node value. - explicit type_error(const char* msg, node_type type) noexcept - : exception(generate_error_message(msg, type).c_str()) { + /// @brief Finds the beginning position of `sv` characters in this referenced character sequence. + /// @param sv The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of `sv` characters, `npos` otherwise. + size_type find(basic_str_view sv, size_type pos = 0) const noexcept { + return find(sv.mp_str, pos, sv.m_len); } - /// @brief Construct a new type_error object with an error message and a node type. - /// @deprecated Use type_error(const char*, node_type) constructor. (since 0.3.12). - /// @param[in] msg An error message. - /// @param[in] type The type of a source node value. - FK_YAML_DEPRECATED("Since 0.3.12; Use explicit type_error(const char*, node_type)") - explicit type_error(const char* msg, detail::node_t type) noexcept - : type_error(msg, detail::convert_to_node_type(type)) { - } + /// @brief Finds the beginning position of `c` character in this referenced character sequence. + /// @param sv The character to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of `c` character, `npos` otherwise. + size_type find(CharT c, size_type pos = 0) const noexcept { + size_type ret = npos; -private: - /// @brief Generate an error message from given parameters. - /// @param msg An error message. - /// @param type The type of a source node value. - /// @return A generated error message. - std::string generate_error_message(const char* msg, node_type type) const noexcept { - return detail::format("type_error: %s type=%s", msg, to_string(type)); - } -}; + if FK_YAML_LIKELY (pos < m_len) { + const size_type n = m_len - pos; + const CharT* p_found = traits_type::find(mp_str + pos, n, c); + if (p_found) { + ret = p_found - mp_str; + } + } -class out_of_range : public exception { -public: - explicit out_of_range(int index) noexcept - : exception(generate_error_message(index).c_str()) { + return ret; } - explicit out_of_range(const char* key) noexcept - : exception(generate_error_message(key).c_str()) { - } + /// @brief Finds the beginning position of `s` character sequence by `n` characters in this referenced character + /// sequence. + /// @param s The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @param n The length of `s` character sequence used for comparison. + /// @return The beginning position of `s` characters, `npos` otherwise. + size_type find(const CharT* s, size_type pos, size_type n) const noexcept { + if FK_YAML_UNLIKELY (n == 0) { + return pos <= m_len ? pos : npos; + } -private: - std::string generate_error_message(int index) { - return detail::format("out_of_range: index %d is out of range", index); - } + if FK_YAML_UNLIKELY (pos >= m_len) { + return npos; + } - std::string generate_error_message(const char* key) { - return detail::format("out_of_range: key \'%s\' is not found.", key); + CharT s0 = s[0]; + const CharT* p_first = mp_str + pos; + const CharT* p_last = mp_str + m_len; + size_type len = m_len - pos; + + while (len >= n) { + // find the first occurence of s0 + p_first = traits_type::find(p_first, len - n + 1, s0); + if (!p_first) { + return npos; + } + + // compare the full strings from the first occurence of s0 + if (traits_type::compare(p_first, s, n) == 0) { + return p_first - mp_str; + } + + len = p_last - (++p_first); + } + + return npos; } -}; -class invalid_tag : public exception { -public: - explicit invalid_tag(const char* msg, const char* tag) - : exception(generate_error_message(msg, tag).c_str()) { + /// @brief Finds the beginning position of `s` character sequence in this referenced character sequence. + /// @param s The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of `s` characters, `npos` otherwise. + size_type find(const CharT* s, size_type pos = 0) const noexcept { + return find(basic_str_view(s), pos); } -private: - std::string generate_error_message(const char* msg, const char* tag) { - return detail::format("invalid_tag: %s tag=%s", msg, tag); + /// @brief Retrospectively finds the beginning position of `sv` characters in this referenced character sequence. + /// @param sv The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of `sv` characters, `npos` otherwise. + size_type rfind(basic_str_view sv, size_type pos = npos) const noexcept { + return rfind(sv.mp_str, pos, sv.m_len); } -}; -FK_YAML_NAMESPACE_END + /// @brief Retrospectively finds the beginning position of `c` character in this referenced character sequence. + /// @param sv The character to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of `c` character, `npos` otherwise. + size_type rfind(CharT c, size_type pos = npos) const noexcept { + if FK_YAML_UNLIKELY (m_len == 0) { + return npos; + } -#endif /* FK_YAML_EXCEPTION_HPP_ */ + size_type idx = pos; + if (pos >= m_len) { + idx = m_len - 1; + } + do { + if (traits_type::eq(mp_str[idx], c)) { + return idx; + } + } while (idx > 0 && --idx < m_len); -FK_YAML_DETAIL_NAMESPACE_BEGIN + return npos; + } -///////////////////////// -// UTF-8 Encoding /// -///////////////////////// + /// @brief Retrospectively finds the beginning position of `s` character sequence by `n` characters in this + /// referenced character sequence. + /// @param s The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @param n The length of `s` character sequence used for comparison. + /// @return The beginning position of `s` characters, `npos` otherwise. + size_type rfind(const CharT* s, size_type pos, size_type n) const noexcept { + if FK_YAML_LIKELY (n <= m_len) { + pos = std::min(m_len - n, pos) + 1; -/// @brief A class which handles UTF-8 encodings. -namespace utf8 { + do { + if (traits_type::compare(mp_str + --pos, s, n) == 0) { + return pos; + } + } while (pos > 0); + } -/// @brief Query the number of UTF-8 character bytes with the first byte. -/// @param first_byte The first byte of a UTF-8 character. -/// @return The number of UTF-8 character bytes. -inline uint32_t get_num_bytes(uint8_t first_byte) { - // The first byte starts with 0b0XXX'XXXX -> 1-byte character - if (first_byte < 0x80) { - return 1; - } - // The first byte starts with 0b110X'XXXX -> 2-byte character - else if ((first_byte & 0xE0) == 0xC0) { - return 2; + return npos; } - // The first byte starts with 0b1110'XXXX -> 3-byte character - else if ((first_byte & 0xF0) == 0xE0) { - return 3; + + /// @brief Retrospectively finds the beginning position of `s` character sequence in this referenced character + /// sequence. + /// @param s The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of `s` characters, `npos` otherwise. + size_type rfind(const CharT* s, size_type pos = npos) const noexcept { + return rfind(basic_str_view(s), pos); } - // The first byte starts with 0b1111'0XXX -> 4-byte character - else if ((first_byte & 0xF8) == 0xF0) { - return 4; + + /// @brief Finds the first occurence of `sv` character sequence in this referenced character sequence. + /// @param sv The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of `sv` characters, `npos` otherwise. + size_type find_first_of(basic_str_view sv, size_type pos = 0) const noexcept { + return find_first_of(sv.mp_str, pos, sv.m_len); } - // The first byte starts with 0b10XX'XXXX or 0b1111'1XXX -> invalid - throw fkyaml::invalid_encoding("Invalid UTF-8 encoding.", {first_byte}); -} + /// @brief Finds the first occurence of `c` character in this referenced character sequence. + /// @param c The character to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of `c` character, `npos` otherwise. + size_type find_first_of(CharT c, size_type pos = 0) const noexcept { + return find(c, pos); + } -/// @brief Validates the encoding of a given byte array whose length is 1. -/// @param[in] byte_array The byte array to be validated. -/// @return true if a given byte array is valid, false otherwise. -inline bool validate(const std::initializer_list& byte_array) noexcept { - switch (byte_array.size()) { - case 1: - // U+0000..U+007F - return uint8_t(*(byte_array.begin())) <= uint8_t(0x7Fu); - case 2: { - auto itr = byte_array.begin(); - uint8_t first = *itr++; - uint8_t second = *itr; + /// @brief Finds the first occurence of `s` character sequence by `n` characters in this referenced character + /// sequence. + /// @param s The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @param n The length of `s` character sequence used for comparison. + /// @return The beginning position of `s` characters, `npos` otherwise. + size_type find_first_of(const CharT* s, size_type pos, size_type n) const noexcept { + if FK_YAML_UNLIKELY (n == 0) { + return npos; + } - // U+0080..U+07FF - // 1st Byte: 0xC2..0xDF - // 2nd Byte: 0x80..0xBF - if (uint8_t(0xC2u) <= first && first <= uint8_t(0xDFu)) { - if (0x80 <= second && second <= 0xBF) { - return true; + for (size_type idx = pos; idx < m_len; ++idx) { + const CharT* p_found = traits_type::find(s, n, mp_str[idx]); + if (p_found) { + return idx; } } - // The rest of byte combinations are invalid. - return false; + return npos; } - case 3: { - auto itr = byte_array.begin(); - uint8_t first = *itr++; - uint8_t second = *itr++; - uint8_t third = *itr; - // U+1000..U+CFFF: - // 1st Byte: 0xE0..0xEC - // 2nd Byte: 0x80..0xBF - // 3rd Byte: 0x80..0xBF - if (0xE0 <= first && first <= 0xEC) { - if (0x80 <= second && second <= 0xBF) { - if (0x80 <= third && third <= 0xBF) { - return true; - } - } - return false; - } + /// @brief Finds the first occurence of `s` character sequence in this referenced character sequence. + /// @param s The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of `s` characters, `npos` otherwise. + size_type find_first_of(const CharT* s, size_type pos = 0) const noexcept { + return find_first_of(basic_str_view(s), pos); + } - // U+D000..U+D7FF: - // 1st Byte: 0xED - // 2nd Byte: 0x80..0x9F - // 3rd Byte: 0x80..0xBF - if (first == 0xED) { - if (0x80 <= second && second <= 0x9F) { - if (0x80 <= third && third <= 0xBF) { - return true; - } - } - return false; - } + /// @brief Finds the last occurence of `sv` character sequence in this referenced character sequence. + /// @param sv The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of `sv` characters, `npos` otherwise. + size_type find_last_of(basic_str_view sv, size_type pos = npos) const noexcept { + return find_last_of(sv.mp_str, pos, sv.m_len); + } - // U+E000..U+FFFF: - // 1st Byte: 0xEE..0xEF - // 2nd Byte: 0x80..0xBF - // 3rd Byte: 0x80..0xBF - if (first == 0xEE || first == 0xEF) { - if (0x80 <= second && second <= 0xBF) { - if (0x80 <= third && third <= 0xBF) { - return true; + /// @brief Finds the last occurence of `c` character in this referenced character sequence. + /// @param c The character to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of `c` character, `npos` otherwise. + size_type find_last_of(CharT c, size_type pos = npos) const noexcept { + return rfind(c, pos); + } + + /// @brief Finds the last occurence of `s` character sequence by `n` characters in this referenced character + /// sequence. + /// @param s The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @param n The length of `s` character sequence used for comparison. + /// @return The beginning position of `s` characters, `npos` otherwise. + size_type find_last_of(const CharT* s, size_type pos, size_type n) const noexcept { + if FK_YAML_LIKELY (n <= m_len) { + pos = std::min(m_len - n - 1, pos); + + do { + const CharT* p_found = traits_type::find(s, n, mp_str[pos]); + if (p_found) { + return pos; } - } - return false; + } while (pos-- != 0); } - // The rest of byte combinations are invalid. - return false; + return npos; } - case 4: { - auto itr = byte_array.begin(); - uint8_t first = *itr++; - uint8_t second = *itr++; - uint8_t third = *itr++; - uint8_t fourth = *itr; - // U+10000..U+3FFFF: - // 1st Byte: 0xF0 - // 2nd Byte: 0x90..0xBF - // 3rd Byte: 0x80..0xBF - // 4th Byte: 0x80..0xBF - if (first == 0xF0) { - if (0x90 <= second && second <= 0xBF) { - if (0x80 <= third && third <= 0xBF) { - if (0x80 <= fourth && fourth <= 0xBF) { - return true; - } - } - } - return false; - } + /// @brief Finds the last occurence of `s` character sequence in this referenced character sequence. + /// @param s The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of `s` characters, `npos` otherwise. + size_type find_last_of(const CharT* s, size_type pos = npos) const noexcept { + return find_last_of(basic_str_view(s), pos); + } - // U+40000..U+FFFFF: - // 1st Byte: 0xF1..0xF3 - // 2nd Byte: 0x80..0xBF - // 3rd Byte: 0x80..0xBF - // 4th Byte: 0x80..0xBF - if (0xF1 <= first && first <= 0xF3) { - if (0x80 <= second && second <= 0xBF) { - if (0x80 <= third && third <= 0xBF) { - if (0x80 <= fourth && fourth <= 0xBF) { - return true; - } - } + /// @brief Finds the first absence of `sv` character sequence in this referenced character sequence. + /// @param sv The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of non `sv` characters, `npos` otherwise. + size_type find_first_not_of(basic_str_view sv, size_type pos = 0) const noexcept { + return find_first_not_of(sv.mp_str, pos, sv.m_len); + } + + /// @brief Finds the first absence of `c` character in this referenced character sequence. + /// @param c The character to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of non `c` character, `npos` otherwise. + size_type find_first_not_of(CharT c, size_type pos = 0) const noexcept { + for (; pos < m_len; ++pos) { + if (!traits_type::eq(mp_str[pos], c)) { + return pos; } - return false; } - // U+100000..U+10FFFF: - // 1st Byte: 0xF4 - // 2nd Byte: 0x80..0x8F - // 3rd Byte: 0x80..0xBF - // 4th Byte: 0x80..0xBF - if (first == 0xF4) { - if (0x80 <= second && second <= 0x8F) { - if (0x80 <= third && third <= 0xBF) { - if (0x80 <= fourth && fourth <= 0xBF) { - return true; - } - } + return npos; + } + + /// @brief Finds the first absence of `s` character sequence by `n` characters in this referenced character + /// sequence. + /// @param s The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @param n The length of `s` character sequence used for comparison. + /// @return The beginning position of non `s` characters, `npos` otherwise. + size_type find_first_not_of(const CharT* s, size_type pos, size_type n) const noexcept { + for (; pos < m_len; ++pos) { + const CharT* p_found = traits_type::find(s, n, mp_str[pos]); + if (!p_found) { + return pos; } - return false; } - // The rest of byte combinations are invalid. - return false; - } - default: // LCOV_EXCL_LINE - return false; // LCOV_EXCL_LINE + return npos; } -} -/// @brief Converts UTF-16 encoded characters to UTF-8 encoded bytes. -/// @param[in] utf16 UTF-16 encoded character(s). -/// @param[out] utf8 UTF-8 encoded bytes. -/// @param[out] consumed_size The number of UTF-16 encoded characters used for the conversion. -/// @param[out] encoded_size The size of UTF-encoded bytes. -inline void from_utf16( - std::array utf16, std::array& utf8, uint32_t& consumed_size, uint32_t& encoded_size) { - if (utf16[0] < char16_t(0x80u)) { - utf8[0] = static_cast(utf16[0] & 0x7Fu); - consumed_size = 1; - encoded_size = 1; - return; - } - else if (utf16[0] <= char16_t(0x7FFu)) { - uint16_t utf8_chunk = static_cast(0xC080u) | static_cast((utf16[0] & 0x07C0u) << 2) | - static_cast(utf16[0] & 0x003Fu); - utf8[0] = static_cast((utf8_chunk & 0xFF00u) >> 8); - utf8[1] = static_cast(utf8_chunk & 0x00FFu); - consumed_size = 1; - encoded_size = 2; - return; - } - else if (utf16[0] < char16_t(0xD800u) || char16_t(0xE000u) <= utf16[0]) { - uint32_t utf8_chunk = static_cast(0xE08080u) | static_cast((utf16[0] & 0xF000u) << 4) | - static_cast((utf16[0] & 0x0FC0u) << 2) | - static_cast(utf16[0] & 0x003Fu); - utf8[0] = static_cast((utf8_chunk & 0xFF0000u) >> 16); - utf8[1] = static_cast((utf8_chunk & 0x00FF00u) >> 8); - utf8[2] = static_cast(utf8_chunk & 0x0000FFu); - consumed_size = 1; - encoded_size = 3; - return; - } - else if (utf16[0] <= char16_t(0xDBFFu) && char16_t(0xDC00u) <= utf16[1] && utf16[1] <= char16_t(0xDFFFu)) { - // for surrogate pairs - uint32_t code_point = 0x10000u + ((utf16[0] & 0x03FFu) << 10) + (utf16[1] & 0x03FFu); - uint32_t utf8_chunk = - static_cast(0xF0808080u) | static_cast((code_point & 0x1C0000u) << 6) | - static_cast((code_point & 0x03F000u) << 4) | - static_cast((code_point & 0x000FC0u) << 2) | static_cast(code_point & 0x00003Fu); - utf8[0] = static_cast((utf8_chunk & 0xFF000000u) >> 24); - utf8[1] = static_cast((utf8_chunk & 0x00FF0000u) >> 16); - utf8[2] = static_cast((utf8_chunk & 0x0000FF00u) >> 8); - utf8[3] = static_cast(utf8_chunk & 0x000000FFu); - consumed_size = 2; - encoded_size = 4; - return; + /// @brief Finds the first absence of `s` character sequence in this referenced character sequence. + /// @param s The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of non `s` characters, `npos` otherwise. + size_type find_first_not_of(const CharT* s, size_type pos = 0) const noexcept { + return find_first_not_of(basic_str_view(s), pos); } - throw invalid_encoding("Invalid UTF-16 encoding detected.", utf16); -} - -/// @brief Converts a UTF-32 encoded character to UTF-8 encoded bytes. -/// @param[in] utf32 A UTF-32 encoded character. -/// @param[out] utf8 UTF-8 encoded bytes. -/// @param[in] encoded_size The size of UTF-encoded bytes. -inline void from_utf32(const char32_t utf32, std::array& utf8, uint32_t& encoded_size) { - if (utf32 < char32_t(0x80u)) { - utf8[0] = static_cast(utf32 & 0x007F); - encoded_size = 1; - return; - } - else if (utf32 <= char32_t(0x7FFu)) { - uint16_t utf8_chunk = static_cast(0xC080u) | static_cast((utf32 & 0x07C0u) << 2) | - static_cast(utf32 & 0x003Fu); - utf8[0] = static_cast((utf8_chunk & 0xFF00u) >> 8); - utf8[1] = static_cast(utf8_chunk & 0x00FFu); - encoded_size = 2; - return; - } - else if (utf32 <= char32_t(0xFFFFu)) { - uint32_t utf8_chunk = static_cast(0xE08080u) | static_cast((utf32 & 0xF000u) << 4) | - static_cast((utf32 & 0x0FC0u) << 2) | static_cast(utf32 & 0x003F); - utf8[0] = static_cast((utf8_chunk & 0xFF0000u) >> 16); - utf8[1] = static_cast((utf8_chunk & 0x00FF00u) >> 8); - utf8[2] = static_cast(utf8_chunk & 0x0000FFu); - encoded_size = 3; - return; - } - else if (utf32 <= char32_t(0x10FFFFu)) { - uint32_t utf8_chunk = static_cast(0xF0808080u) | static_cast((utf32 & 0x1C0000u) << 6) | - static_cast((utf32 & 0x03F000u) << 4) | - static_cast((utf32 & 0x000FC0u) << 2) | - static_cast(utf32 & 0x00003Fu); - utf8[0] = static_cast((utf8_chunk & 0xFF000000u) >> 24); - utf8[1] = static_cast((utf8_chunk & 0x00FF0000u) >> 16); - utf8[2] = static_cast((utf8_chunk & 0x0000FF00u) >> 8); - utf8[3] = static_cast(utf8_chunk & 0x000000FFu); - encoded_size = 4; - return; + /// @brief Finds the last absence of `sv` character sequence in this referenced character sequence. + /// @param sv The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of non `sv` characters, `npos` otherwise. + size_type find_last_not_of(basic_str_view sv, size_type pos = npos) const noexcept { + return find_last_not_of(sv.mp_str, pos, sv.m_len); } - throw invalid_encoding("Invalid UTF-32 encoding detected.", utf32); -} - -} // namespace utf8 + /// @brief Finds the last absence of `c` character in this referenced character sequence. + /// @param c The character to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of non `c` character, `npos` otherwise. + size_type find_last_not_of(CharT c, size_type pos = npos) const noexcept { + if FK_YAML_LIKELY (m_len > 0) { + pos = std::min(m_len, pos); -FK_YAML_DETAIL_NAMESPACE_END + do { + if (!traits_type::eq(mp_str[--pos], c)) { + return pos; + } + } while (pos > 0); + } -#endif /* FK_YAML_DETAIL_ENCODINGS_UTF_ENCODINGS_HPP_ */ + return npos; + } -// #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_ENCODINGS_YAML_ESCAPER_HPP_ -#define FK_YAML_DETAIL_ENCODINGS_YAML_ESCAPER_HPP_ + /// @brief Finds the last absence of `s` character sequence by `n` characters in this referenced character + /// sequence. + /// @param s The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @param n The length of `s` character sequence used for comparison. + /// @return The beginning position of non `s` characters, `npos` otherwise. + size_type find_last_not_of(const CharT* s, size_type pos, size_type n) const noexcept { + if FK_YAML_UNLIKELY (n <= m_len) { + pos = std::min(m_len - n, pos) + 1; -#include + do { + const CharT* p_found = traits_type::find(s, n, mp_str[--pos]); + if (!p_found) { + return pos; + } + } while (pos > 0); + } -// #include + return npos; + } -// #include + /// @brief Finds the last absence of `s` character sequence in this referenced character sequence. + /// @param s The character sequence to compare with. + /// @param pos The offset of the search beginning position in this referenced character sequence. + /// @return The beginning position of non `s` characters, `npos` otherwise. + size_type find_last_not_of(const CharT* s, size_type pos = npos) const noexcept { + return find_last_not_of(basic_str_view(s), pos); + } -// #include +private: + size_type m_len {0}; + const value_type* mp_str {nullptr}; +}; -// #include +// Prior to C++17, a static constexpr class member needs an out-of-class definition. +#ifndef FK_YAML_HAS_CXX_17 +template +constexpr typename basic_str_view::size_type basic_str_view::npos; -FK_YAML_DETAIL_NAMESPACE_BEGIN +#endif // !defined(FK_YAML_HAS_CXX_17) -class yaml_escaper { - using iterator = ::std::string::const_iterator; +/// @brief An equal-to operator of the basic_str_view class. +/// @tparam CharT Character type +/// @tparam Traits Character traits type. +/// @param lhs A basic_str_view object for comparison. +/// @param rhs A basic_str_view object to compare with. +/// @return true if the two objects are the same, false otherwise. +template +inline bool operator==(basic_str_view lhs, basic_str_view rhs) noexcept { + // Comparing the lengths first will omit unnecessary value comparison in compare(). + return lhs.size() == rhs.size() && lhs.compare(rhs) == 0; +} +/// @brief An equal-to operator of the basic_str_view class. +/// @tparam CharT Character type +/// @tparam Traits Character traits type. +/// @param lhs A basic_str_view object for comparison. +/// @param rhs A basic_string object to compare with. +/// @return true if the two objects are the same, false otherwise. +template +inline bool operator==(basic_str_view lhs, const std::basic_string& rhs) noexcept { + return lhs == basic_str_view(rhs); +} + +/// @brief An equal-to operator of the basic_str_view class. +/// @tparam CharT Character type +/// @tparam Traits Character traits type. +/// @param lhs A basic_string object for comparison. +/// @param rhs A basic_str_view object to compare with. +/// @return true if the two objects are the same, false otherwise. +template +inline bool operator==(const std::basic_string& lhs, basic_str_view rhs) noexcept { + return basic_str_view(lhs) == rhs; +} + +/// @brief An equal-to operator of the basic_str_view class. +/// @tparam CharT Character type +/// @tparam Traits Character traits type. +/// @tparam N The length of the character array. +/// @param lhs A basic_str_view object for comparison. +/// @param rhs A character array to compare with. +/// @return true if the two objects are the same, false otherwise. +template +inline bool operator==(basic_str_view lhs, const CharT (&rhs)[N]) noexcept { + // assume `rhs` is null terminated + return lhs == basic_str_view(rhs, N - 1); +} + +/// @brief An equal-to operator of the basic_str_view class. +/// @tparam CharT Character type +/// @tparam Traits Character traits type. +/// @tparam N The length of the character array. +/// @param rhs A character array for comparison. +/// @param lhs A basic_str_view object to compare with. +/// @return true if the two objects are the same, false otherwise. +template +inline bool operator==(const CharT (&lhs)[N], basic_str_view rhs) noexcept { + // assume `lhs` is null terminated + return basic_str_view(lhs, N - 1) == rhs; +} + +/// @brief An not-equal-to operator of the basic_str_view class. +/// @tparam CharT Character type +/// @tparam Traits Character traits type. +/// @param lhs A basic_str_view object for comparison. +/// @param rhs A basic_str_view object to compare with. +/// @return true if the two objects are different, false otherwise. +template +inline bool operator!=(basic_str_view lhs, basic_str_view rhs) noexcept { + return !(lhs == rhs); +} + +/// @brief An not-equal-to operator of the basic_str_view class. +/// @tparam CharT Character type +/// @tparam Traits Character traits type. +/// @param lhs A basic_str_view object for comparison. +/// @param rhs A basic_string object to compare with. +/// @return true if the two objects are different, false otherwise. +template +inline bool operator!=(basic_str_view lhs, const std::basic_string& rhs) noexcept { + return !(lhs == basic_str_view(rhs)); +} + +/// @brief An not-equal-to operator of the basic_str_view class. +/// @tparam CharT Character type +/// @tparam Traits Character traits type. +/// @param lhs A basic_string object for comparison. +/// @param rhs A basic_str_view object to compare with. +/// @return true if the two objects are different, false otherwise. +template +inline bool operator!=(const std::basic_string& lhs, basic_str_view rhs) noexcept { + return !(basic_str_view(lhs) == rhs); +} + +/// @brief An not-equal-to operator of the basic_str_view class. +/// @tparam CharT Character type +/// @tparam Traits Character traits type. +/// @tparam N The length of the character array. +/// @param lhs A basic_str_view object for comparison. +/// @param rhs A character array to compare with. +/// @return true if the two objects are different, false otherwise. +template +inline bool operator!=(basic_str_view lhs, const CharT (&rhs)[N]) noexcept { + // assume `rhs` is null terminated. + return !(lhs == basic_str_view(rhs, N - 1)); +} + +/// @brief An not-equal-to operator of the basic_str_view class. +/// @tparam CharT Character type +/// @tparam Traits Character traits type. +/// @tparam N The length of the character array. +/// @param rhs A character array for comparison. +/// @param lhs A basic_str_view object to compare with. +/// @return true if the two objects are different, false otherwise. +template +inline bool operator!=(const CharT (&lhs)[N], basic_str_view rhs) noexcept { + // assume `lhs` is null terminate + return !(basic_str_view(lhs, N - 1) == rhs); +} + +/// @brief An less-than operator of the basic_str_view class. +/// @tparam CharT Character type +/// @tparam Traits Character traits type. +/// @param lhs A basic_str_view object for comparison. +/// @param rhs A basic_str_view object to compare with. +/// @return true if `lhs` is less than `rhs`, false otherwise. +template +inline bool operator<(basic_str_view lhs, basic_str_view rhs) noexcept { + return lhs.compare(rhs) < 0; +} + +/// @brief An less-than-or-equal-to operator of the basic_str_view class. +/// @tparam CharT Character type +/// @tparam Traits Character traits type. +/// @param lhs A basic_str_view object for comparison. +/// @param rhs A basic_str_view object to compare with. +/// @return true if `lhs` is less than or equal to `rhs`, false otherwise. +template +inline bool operator<=(basic_str_view lhs, basic_str_view rhs) noexcept { + return lhs.compare(rhs) <= 0; +} + +/// @brief An greater-than operator of the basic_str_view class. +/// @tparam CharT Character type +/// @tparam Traits Character traits type. +/// @param lhs A basic_str_view object for comparison. +/// @param rhs A basic_str_view object to compare with. +/// @return true if `lhs` is greater than `rhs`, false otherwise. +template +inline bool operator>(basic_str_view lhs, basic_str_view rhs) noexcept { + return lhs.compare(rhs) > 0; +} + +/// @brief An greater-than-or-equal-to operator of the basic_str_view class. +/// @tparam CharT Character type +/// @tparam Traits Character traits type. +/// @param lhs A basic_str_view object for comparison. +/// @param rhs A basic_str_view object to compare with. +/// @return true if `lhs` is greater than or equal to `rhs`, false otherwise. +template +inline bool operator>=(basic_str_view lhs, basic_str_view rhs) noexcept { + return lhs.compare(rhs) >= 0; +} + +/// @brief Insertion operator of the basic_str_view class. +/// @tparam CharT Character type. +/// @tparam Traits Character traits type. +/// @param os An output stream object. +/// @param sv A basic_str_view object. +/// @return Reference to the output stream object `os`. +template +inline std::basic_ostream& operator<<( + std::basic_ostream& os, basic_str_view sv) { + return os.write(sv.data(), static_cast(sv.size())); +} + +/// @brief view into `char` sequence. +using str_view = basic_str_view; + +#if FK_YAML_HAS_CHAR8_T +/// @brief view into `char8_t` sequence. +using u8str_view = basic_str_view; +#endif + +/// @brief view into `char16_t` sequence. +using u16str_view = basic_str_view; + +/// @brief view into `char32_t` sequence. +using u32str_view = basic_str_view; + +FK_YAML_DETAIL_NAMESPACE_END + +#endif /* FK_YAML_DETAIL_STR_VIEW_HPP */ + + +FK_YAML_DETAIL_NAMESPACE_BEGIN + +/// @brief A position tracker of the target buffer. +class position_tracker { +public: + void set_target_buffer(str_view buffer) noexcept { + m_begin = m_last = buffer.begin(); + m_end = buffer.end(); + } + + /// @brief Update the set of the current position information. + /// @note This function doesn't support cases where cur_pos has moved backward from the last call. + /// @param cur_pos The iterator to the current element of the buffer. + void update_position(const char* p_current) { + uint32_t diff = static_cast(p_current - m_last); + if (diff == 0) { + return; + } + + m_cur_pos += diff; + uint32_t prev_lines_read = m_lines_read; + m_lines_read += static_cast(std::count(m_last, p_current, '\n')); + m_last = p_current; + + if (prev_lines_read == m_lines_read) { + m_cur_pos_in_line += diff; + return; + } + + uint32_t count = 0; + const char* p_begin = m_begin; + while (--p_current != p_begin) { + if (*p_current == '\n') { + break; + } + count++; + } + m_cur_pos_in_line = count; + } + + uint32_t get_cur_pos() const noexcept { + return m_cur_pos; + } + + /// @brief Get the current position in the current line. + /// @return uint32_t The current position in the current line. + uint32_t get_cur_pos_in_line() const noexcept { + return m_cur_pos_in_line; + } + + /// @brief Get the number of lines which have already been read. + /// @return uint32_t The number of lines which have already been read. + uint32_t get_lines_read() const noexcept { + return m_lines_read; + } + +private: + /// The iterator to the beginning element in the target buffer. + const char* m_begin {}; + /// The iterator to the past-the-end element in the target buffer. + const char* m_end {}; + /// The iterator to the last updated element in the target buffer. + const char* m_last {}; + /// The current position from the beginning of an input buffer. + uint32_t m_cur_pos {0}; + /// The current position in the current line. + uint32_t m_cur_pos_in_line {0}; + /// The number of lines which have already been read. + uint32_t m_lines_read {0}; +}; + +FK_YAML_DETAIL_NAMESPACE_END + +#endif /* FK_YAML_DETAIL_INPUT_POSITION_TRACKER_HPP */ + +// #include + +// #include + +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_TYPES_LEXICAL_TOKEN_T_HPP +#define FK_YAML_DETAIL_TYPES_LEXICAL_TOKEN_T_HPP + +// #include + + +FK_YAML_DETAIL_NAMESPACE_BEGIN + +/// @brief Definition of lexical token types. +enum class lexical_token_t { + END_OF_BUFFER, //!< the end of input buffer. + EXPLICIT_KEY_PREFIX, //!< the character for explicit mapping key prefix `?`. + KEY_SEPARATOR, //!< the key separator `:` + VALUE_SEPARATOR, //!< the value separator `,` + ANCHOR_PREFIX, //!< the character for anchor prefix `&` + ALIAS_PREFIX, //!< the character for alias prefix `*` + YAML_VER_DIRECTIVE, //!< a YAML version directive found. use get_yaml_version() to get a value. + TAG_DIRECTIVE, //!< a TAG directive found. use GetTagInfo() to get the tag information. + TAG_PREFIX, //!< the character for tag prefix `!` + INVALID_DIRECTIVE, //!< an invalid directive found. do not try to get the value. + SEQUENCE_BLOCK_PREFIX, //!< the character for sequence block prefix `- ` + SEQUENCE_FLOW_BEGIN, //!< the character for sequence flow begin `[` + SEQUENCE_FLOW_END, //!< the character for sequence flow end `]` + MAPPING_FLOW_BEGIN, //!< the character for mapping begin `{` + MAPPING_FLOW_END, //!< the character for mapping end `}` + PLAIN_SCALAR, //!< plain (unquoted) scalars + SINGLE_QUOTED_SCALAR, //!< single-quoted scalars + DOUBLE_QUOTED_SCALAR, //!< double-quoted scalars + BLOCK_LITERAL_SCALAR, //!< block literal style scalars + BLOCK_FOLDED_SCALAR, //!< block folded style scalars + END_OF_DIRECTIVES, //!< the end of declaration of directives specified by `---`. + END_OF_DOCUMENT, //!< the end of a YAML document specified by `...`. +}; + +FK_YAML_DETAIL_NAMESPACE_END + +#endif /* FK_YAML_DETAIL_TYPES_LEXICAL_TOKEN_T_HPP */ + +// #include + + +FK_YAML_DETAIL_NAMESPACE_BEGIN + +/// @brief Lexical token information +struct lexical_token { + /// Lexical token type. + lexical_token_t type {lexical_token_t::END_OF_BUFFER}; + /// Lexical token contents. + str_view str {}; +}; + +namespace { + +// whether the current context is flow(1) or block(0) +const uint32_t flow_context_bit = 1u << 0u; +// whether the current document part is directive(1) or content(0) +const uint32_t document_directive_bit = 1u << 1u; + +} // anonymous namespace + +/// @brief A class which lexically analyzes YAML formatted inputs. +class lexical_analyzer { public: - static bool unescape(const char*& begin, const char* end, std::string& buff) { - FK_YAML_ASSERT(*begin == '\\' && std::distance(begin, end) > 0); - bool ret = true; + /// @brief Construct a new lexical_analyzer object. + /// @param input_buffer An input buffer. + explicit lexical_analyzer(str_view input_buffer) noexcept + : m_input_buffer(input_buffer), + m_cur_itr(m_input_buffer.begin()), + m_end_itr(m_input_buffer.end()) { + m_pos_tracker.set_target_buffer(m_input_buffer); + } + + /// @brief Get the next lexical token by scanning the left of the input buffer. + /// @return lexical_token The next lexical token. + lexical_token get_next_token() { + skip_white_spaces_and_newline_codes(); + + m_token_begin_itr = m_cur_itr; + m_pos_tracker.update_position(m_cur_itr); + m_last_token_begin_pos = m_pos_tracker.get_cur_pos_in_line(); + m_last_token_begin_line = m_pos_tracker.get_lines_read(); + + if (m_cur_itr == m_end_itr) { + return {}; + } + + lexical_token token {}; + token.type = lexical_token_t::PLAIN_SCALAR; + + switch (*m_cur_itr) { + case '?': + if (++m_cur_itr == m_end_itr) { + token.str = str_view {m_token_begin_itr, m_end_itr}; + return token; + } + + if (*m_cur_itr == ' ') { + token.type = lexical_token_t::EXPLICIT_KEY_PREFIX; + return token; + } + break; + case ':': // key separator + if (++m_cur_itr == m_end_itr) { + token.type = lexical_token_t::KEY_SEPARATOR; + return token; + } + + switch (*m_cur_itr) { + case ' ': + case '\t': + case '\n': + token.type = lexical_token_t::KEY_SEPARATOR; + return token; + case ',': + case '[': + case ']': + case '{': + case '}': + if (m_state & flow_context_bit) { + // Flow indicators are not "safe" to be followed in a flow context. + // See https://yaml.org/spec/1.2.2/#733-plain-style for more details. + token.type = lexical_token_t::KEY_SEPARATOR; + return token; + } + break; + default: + break; + } + break; + case ',': // value separator + ++m_cur_itr; + token.type = lexical_token_t::VALUE_SEPARATOR; + return token; + case '&': { // anchor prefix + extract_anchor_name(token); + bool is_empty = token.str.empty(); + if FK_YAML_UNLIKELY (is_empty) { + emit_error("anchor name must not be empty."); + } + + token.type = lexical_token_t::ANCHOR_PREFIX; + return token; + } + case '*': { // alias prefix + extract_anchor_name(token); + bool is_empty = token.str.empty(); + if FK_YAML_UNLIKELY (is_empty) { + emit_error("anchor name must not be empty."); + } + + token.type = lexical_token_t::ALIAS_PREFIX; + return token; + } + case '!': + extract_tag_name(token); + token.type = lexical_token_t::TAG_PREFIX; + return token; + case '#': // comment prefix + scan_comment(); + return get_next_token(); + case '%': // directive prefix + if (m_state & document_directive_bit) { + token.type = scan_directive(); + return token; + } + // The '%' character can be safely used as the first character in document contents. + // See https://yaml.org/spec/1.2.2/#912-document-markers for more details. + break; + case '-': { + char next = *(m_cur_itr + 1); + switch (next) { + case ' ': + case '\t': + case '\n': + // Move a cursor to the beginning of the next token. + m_cur_itr += 2; + token.type = lexical_token_t::SEQUENCE_BLOCK_PREFIX; + return token; + default: + break; + } + + bool is_available = ((m_end_itr - m_cur_itr) > 2); + if (is_available) { + bool is_dir_end = std::equal(m_token_begin_itr, m_cur_itr + 3, "---"); + if (is_dir_end) { + m_cur_itr += 3; + token.type = lexical_token_t::END_OF_DIRECTIVES; + return token; + } + } + + break; + } + case '[': // sequence flow begin + ++m_cur_itr; + token.type = lexical_token_t::SEQUENCE_FLOW_BEGIN; + return token; + case ']': // sequence flow end + ++m_cur_itr; + token.type = lexical_token_t::SEQUENCE_FLOW_END; + return token; + case '{': // mapping flow begin + ++m_cur_itr; + token.type = lexical_token_t::MAPPING_FLOW_BEGIN; + return token; + case '}': // mapping flow end + ++m_cur_itr; + token.type = lexical_token_t::MAPPING_FLOW_END; + return token; + case '@': + emit_error("Any token cannot start with at(@). It is a reserved indicator for YAML."); + case '`': + emit_error("Any token cannot start with grave accent(`). It is a reserved indicator for YAML."); + case '\"': + ++m_token_begin_itr; + token.type = lexical_token_t::DOUBLE_QUOTED_SCALAR; + determine_double_quoted_scalar_range(token.str); + check_scalar_content(token.str); + return token; + case '\'': + ++m_token_begin_itr; + token.type = lexical_token_t::SINGLE_QUOTED_SCALAR; + determine_single_quoted_scalar_range(token.str); + check_scalar_content(token.str); + return token; + case '.': { + bool is_available = ((m_end_itr - m_cur_itr) > 2); + if (is_available) { + bool is_doc_end = std::equal(m_cur_itr, m_cur_itr + 3, "..."); + if (is_doc_end) { + m_cur_itr += 3; + token.type = lexical_token_t::END_OF_DOCUMENT; + return token; + } + } + break; + } + case '|': + case '>': { + str_view sv {m_token_begin_itr, m_end_itr}; + std::size_t header_end_pos = sv.find('\n'); + + FK_YAML_ASSERT(!sv.empty()); + token.type = (sv[0] == '|') ? lexical_token_t::BLOCK_LITERAL_SCALAR : lexical_token_t::BLOCK_FOLDED_SCALAR; + + FK_YAML_ASSERT(header_end_pos != str_view::npos); + str_view header_line = sv.substr(1, header_end_pos - 1); + m_block_scalar_header = convert_to_block_scalar_header(header_line); + + m_token_begin_itr = sv.begin() + (header_end_pos + 1); + scan_block_style_string_token(m_block_scalar_header.indent, token.str); + + return token; + } + default: + break; + } + + token.type = lexical_token_t::PLAIN_SCALAR; + determine_plain_scalar_range(token.str); + check_scalar_content(token.str); + return token; + } + + /// @brief Get the beginning position of a last token. + /// @return uint32_t The beginning position of a last token. + uint32_t get_last_token_begin_pos() const noexcept { + return m_last_token_begin_pos; + } + + /// @brief Get the number of lines already processed. + /// @return uint32_t The number of lines already processed. + uint32_t get_lines_processed() const noexcept { + return m_last_token_begin_line; + } + + /// @brief Get the YAML version specification. + /// @return str_view A YAML version specification. + str_view get_yaml_version() const noexcept { + return m_yaml_version; + } + + /// @brief Get the YAML tag handle defined in the TAG directive. + /// @return str_view A tag handle. + str_view get_tag_handle() const noexcept { + return m_tag_handle; + } + + /// @brief Get the YAML tag prefix defined in the TAG directive. + /// @return str_view A tag prefix. + str_view get_tag_prefix() const noexcept { + return m_tag_prefix; + } + + /// @brief Get block scalar header information. + /// @return block_scalar_header Block scalar header information. + block_scalar_header get_block_scalar_header() const noexcept { + return m_block_scalar_header; + } + + /// @brief Toggles the context state between flow and block. + /// @param is_flow_context true: flow context, false: block context + void set_context_state(bool is_flow_context) noexcept { + m_state &= ~flow_context_bit; + if (is_flow_context) { + m_state |= flow_context_bit; + } + } + + /// @brief Toggles the document state between directive and content. + /// @param is_directive true: directive, false: content + void set_document_state(bool is_directive) noexcept { + m_state &= ~document_directive_bit; + if (is_directive) { + m_state |= document_directive_bit; + } + } + +private: + /// @brief Skip until a newline code or a null character is found. + void scan_comment() { + FK_YAML_ASSERT(*m_cur_itr == '#'); + skip_until_line_end(); + } + + /// @brief Scan directives starting with the prefix '%' + /// @note Currently, only %YAML directive is supported. If not, returns invalid or throws an exception. + /// @return lexical_token_t The lexical token type for directives. + lexical_token_t scan_directive() { + FK_YAML_ASSERT(*m_cur_itr == '%'); + + m_token_begin_itr = ++m_cur_itr; + + bool ends_loop = false; + while (!ends_loop && m_cur_itr != m_end_itr) { + switch (*m_cur_itr) { + case ' ': + case '\t': + ends_loop = true; + break; + case '\n': + skip_until_line_end(); + return lexical_token_t::INVALID_DIRECTIVE; + default: + ++m_cur_itr; + break; + } + } - switch (*++begin) { - case 'a': - buff.push_back('\a'); - break; - case 'b': - buff.push_back('\b'); - break; - case 't': - case char(0x09): - buff.push_back('\t'); - break; - case 'n': - buff.push_back('\n'); - break; - case 'v': - buff.push_back('\v'); - break; - case 'f': - buff.push_back('\f'); - break; - case 'r': - buff.push_back('\r'); - break; - case 'e': - buff.push_back(char(0x1B)); - break; + str_view dir_name(m_token_begin_itr, m_cur_itr); + + if (dir_name == "TAG") { + if FK_YAML_UNLIKELY (!ends_loop) { + emit_error("There must be at least one white space between \"%TAG\" and tag info."); + } + skip_white_spaces(); + return scan_tag_directive(); + } + + if (dir_name == "YAML") { + if FK_YAML_UNLIKELY (!ends_loop) { + emit_error("There must be at least one white space between \"%YAML\" and version."); + } + skip_white_spaces(); + return scan_yaml_version_directive(); + } + + skip_until_line_end(); + return lexical_token_t::INVALID_DIRECTIVE; + } + + /// @brief Scan a YAML tag directive. + /// @return lexical_token_t The lexical token type for YAML tag directives. + lexical_token_t scan_tag_directive() { + m_token_begin_itr = m_cur_itr; + + // + // extract a tag handle + // + + if FK_YAML_UNLIKELY (*m_cur_itr != '!') { + emit_error("Tag handle must start with \'!\'."); + } + + if FK_YAML_UNLIKELY (++m_cur_itr == m_end_itr) { + emit_error("invalid TAG directive is found."); + } + + switch (*m_cur_itr) { case ' ': - buff.push_back(' '); - break; - case '\"': - buff.push_back('\"'); - break; - case '/': - buff.push_back('/'); - break; - case '\\': - buff.push_back('\\'); - break; - case 'N': // next line - unescape_escaped_unicode(0x85u, buff); - break; - case '_': // non-breaking space - unescape_escaped_unicode(0xA0u, buff); + case '\t': + // primary handle (!) break; - case 'L': // line separator - unescape_escaped_unicode(0x2028u, buff); + case '!': + if FK_YAML_UNLIKELY (++m_cur_itr == m_end_itr) { + emit_error("invalid TAG directive is found."); + } + if FK_YAML_UNLIKELY (*m_cur_itr != ' ' && *m_cur_itr != '\t') { + emit_error("invalid tag handle is found."); + } break; - case 'P': // paragraph separator - unescape_escaped_unicode(0x2029u, buff); + default: { + bool ends_loop = false; + do { + switch (*m_cur_itr) { + case ' ': + case '\t': + emit_error("invalid tag handle is found."); + case '!': { + if (m_cur_itr + 1 == m_end_itr) { + ends_loop = true; + break; + } + char next = *(m_cur_itr + 1); + if FK_YAML_UNLIKELY (next != ' ' && next != '\t') { + emit_error("invalid tag handle is found."); + } + ends_loop = true; + break; + } + case '-': + break; + default: + if FK_YAML_UNLIKELY (!isalnum(*m_cur_itr)) { + // See https://yaml.org/spec/1.2.2/#rule-c-named-tag-handle for more details. + emit_error("named handle can contain only numbers(0-9), alphabets(A-Z,a-z) and hyphens(-)."); + } + break; + } + + if FK_YAML_UNLIKELY (++m_cur_itr == m_end_itr) { + emit_error("invalid TAG directive is found."); + } + } while (!ends_loop); break; - case 'x': { - char32_t codepoint {0}; - ret = extract_codepoint(begin, end, 1, codepoint); - if FK_YAML_LIKELY (ret) { - unescape_escaped_unicode(codepoint, buff); + } + } + + m_tag_handle = str_view {m_token_begin_itr, m_cur_itr}; + + skip_white_spaces(); + + // + // extract a tag prefix. + // + + m_token_begin_itr = m_cur_itr; + const char* p_tag_prefix_begin = m_cur_itr; + switch (*m_cur_itr) { + // a tag prefix must not start with flow indicators to avoid ambiguity. + // See https://yaml.org/spec/1.2.2/#rule-ns-global-tag-prefix for more details. + case ',': + case '[': + case ']': + case '{': + case '}': + emit_error("tag prefix must not start with flow indicators (\',\', [], {})."); + } + + // extract the rest of a tag prefix. + bool ends_loop = false; + do { + switch (*m_cur_itr) { + case ' ': + case '\t': + case '\n': + ends_loop = true; + break; } - break; + } while (!ends_loop && ++m_cur_itr != m_end_itr); + + bool is_valid = uri_encoding::validate(p_tag_prefix_begin, m_cur_itr); + if FK_YAML_UNLIKELY (!is_valid) { + emit_error("invalid URI character is found in a tag prefix."); + } + + m_tag_prefix = str_view {p_tag_prefix_begin, m_cur_itr}; + + return lexical_token_t::TAG_DIRECTIVE; + } + + /// @brief Scan a YAML version directive. + /// @note Only 1.1 and 1.2 are supported. If not, throws an exception. + /// @return lexical_token_t The lexical token type for YAML version directives. + lexical_token_t scan_yaml_version_directive() { + m_token_begin_itr = m_cur_itr; + + bool ends_loop = false; + while (!ends_loop && m_cur_itr != m_end_itr) { + switch (*m_cur_itr) { + case ' ': + case '\t': + case '\n': + ends_loop = true; + break; + default: + ++m_cur_itr; + break; + } + } + + m_yaml_version = str_view {m_token_begin_itr, m_cur_itr}; + + if FK_YAML_UNLIKELY (m_yaml_version.compare("1.1") != 0 && m_yaml_version.compare("1.2") != 0) { + emit_error("Only 1.1 and 1.2 can be specified as the YAML version."); + } + + return lexical_token_t::YAML_VER_DIRECTIVE; + } + + /// @brief Extracts an anchor name from the input. + /// @param token The token into which the extraction result is written. + void extract_anchor_name(lexical_token& token) { + FK_YAML_ASSERT(*m_cur_itr == '&' || *m_cur_itr == '*'); + + m_token_begin_itr = ++m_cur_itr; + + bool ends_loop = false; + for (; m_cur_itr != m_end_itr; ++m_cur_itr) { + switch (*m_cur_itr) { + // anchor name must not contain white spaces, newline codes and flow indicators. + // See https://yaml.org/spec/1.2.2/#692-node-anchors for more details. + case ' ': + case '\t': + case '\n': + case '{': + case '}': + case '[': + case ']': + case ',': + ends_loop = true; + break; + default: + break; + } + + if (ends_loop) { + break; + } + } + + token.str = str_view {m_token_begin_itr, m_cur_itr}; + } + + /// @brief Extracts a tag name from the input. + /// @param token The token into which the extraction result is written. + void extract_tag_name(lexical_token& token) { + FK_YAML_ASSERT(*m_cur_itr == '!'); + + if (++m_cur_itr == m_end_itr) { + // Just "!" is a non-specific tag. + token.str = str_view {m_token_begin_itr, m_end_itr}; + return; } - case 'u': { - char32_t codepoint {0}; - ret = extract_codepoint(begin, end, 2, codepoint); - if FK_YAML_LIKELY (ret) { - unescape_escaped_unicode(codepoint, buff); - } + + bool is_verbatim = false; + bool allows_another_tag_prefix = false; + + switch (*m_cur_itr) { + case ' ': + case '\n': + // Just "!" is a non-specific tag. + token.str = str_view {m_token_begin_itr, m_cur_itr}; + return; + case '!': + // Secondary tag handles (!!suffix) break; - } - case 'U': { - char32_t codepoint {0}; - ret = extract_codepoint(begin, end, 4, codepoint); - if FK_YAML_LIKELY (ret) { - unescape_escaped_unicode(codepoint, buff); - } + case '<': + // Verbatim tags (!) + is_verbatim = true; + ++m_cur_itr; break; - } default: - // Unsupported escape sequence is found in a string token. - ret = false; + // Either local tags (!suffix) or named handles (!tag!suffix) + allows_another_tag_prefix = true; break; } - return ret; - } - - static ::std::string escape(const char* begin, const char* end, bool& is_escaped) { - ::std::string escaped {}; - escaped.reserve(std::distance(begin, end)); - for (; begin != end; ++begin) { - switch (*begin) { - case 0x01: - escaped += "\\u0001"; - is_escaped = true; - break; - case 0x02: - escaped += "\\u0002"; - is_escaped = true; - break; - case 0x03: - escaped += "\\u0003"; - is_escaped = true; - break; - case 0x04: - escaped += "\\u0004"; - is_escaped = true; - break; - case 0x05: - escaped += "\\u0005"; - is_escaped = true; - break; - case 0x06: - escaped += "\\u0006"; - is_escaped = true; - break; - case '\a': - escaped += "\\a"; - is_escaped = true; - break; - case '\b': - escaped += "\\b"; - is_escaped = true; + bool is_named_handle = false; + bool ends_loop = false; + do { + if (++m_cur_itr == m_end_itr) { break; + } + + switch (*m_cur_itr) { + // Tag names must not contain spaces or newline codes. + case ' ': case '\t': - escaped += "\\t"; - is_escaped = true; - break; case '\n': - escaped += "\\n"; - is_escaped = true; - break; - case '\v': - escaped += "\\v"; - is_escaped = true; - break; - case '\f': - escaped += "\\f"; - is_escaped = true; - break; - case '\r': - escaped += "\\r"; - is_escaped = true; - break; - case 0x0E: - escaped += "\\u000E"; - is_escaped = true; - break; - case 0x0F: - escaped += "\\u000F"; - is_escaped = true; - break; - case 0x10: - escaped += "\\u0010"; - is_escaped = true; - break; - case 0x11: - escaped += "\\u0011"; - is_escaped = true; - break; - case 0x12: - escaped += "\\u0012"; - is_escaped = true; - break; - case 0x13: - escaped += "\\u0013"; - is_escaped = true; - break; - case 0x14: - escaped += "\\u0014"; - is_escaped = true; - break; - case 0x15: - escaped += "\\u0015"; - is_escaped = true; - break; - case 0x16: - escaped += "\\u0016"; - is_escaped = true; - break; - case 0x17: - escaped += "\\u0017"; - is_escaped = true; - break; - case 0x18: - escaped += "\\u0018"; - is_escaped = true; - break; - case 0x19: - escaped += "\\u0019"; - is_escaped = true; - break; - case 0x1A: - escaped += "\\u001A"; - is_escaped = true; - break; - case 0x1B: - escaped += "\\e"; - is_escaped = true; - break; - case 0x1C: - escaped += "\\u001C"; - is_escaped = true; - break; - case 0x1D: - escaped += "\\u001D"; - is_escaped = true; - break; - case 0x1E: - escaped += "\\u001E"; - is_escaped = true; - break; - case 0x1F: - escaped += "\\u001F"; - is_escaped = true; - break; - case '\"': - escaped += "\\\""; - is_escaped = true; + ends_loop = true; break; - case '\\': - escaped += "\\\\"; - is_escaped = true; + case '!': + if FK_YAML_UNLIKELY (!allows_another_tag_prefix) { + emit_error("invalid tag prefix (!) is found."); + } + + is_named_handle = true; + // tag prefix must not appear three times. + allows_another_tag_prefix = false; break; default: - int diff = static_cast(std::distance(begin, end)); - if (diff > 1) { - if (*begin == char(0xC2u) && *(begin + 1) == char(0x85u)) { - escaped += "\\N"; - std::advance(begin, 1); - is_escaped = true; - break; - } - else if (*begin == char(0xC2u) && *(begin + 1) == char(0xA0u)) { - escaped += "\\_"; - std::advance(begin, 1); - is_escaped = true; - break; - } - - if (diff > 2) { - if (*begin == char(0xE2u) && *(begin + 1) == char(0x80u) && *(begin + 2) == char(0xA8u)) { - escaped += "\\L"; - std::advance(begin, 2); - is_escaped = true; - break; - } - if (*begin == char(0xE2u) && *(begin + 1) == char(0x80u) && *(begin + 2) == char(0xA9u)) { - escaped += "\\P"; - std::advance(begin, 2); - is_escaped = true; - break; - } - } - } - escaped += *begin; break; } + } while (!ends_loop); + + token.str = str_view {m_token_begin_itr, m_cur_itr}; + + if (is_verbatim) { + char last = token.str.back(); + if FK_YAML_UNLIKELY (last != '>') { + emit_error("verbatim tag (!) must be ended with \'>\'."); + } + + // only the `TAG` part of the `!` for URI validation. + str_view tag_body = token.str.substr(2, token.str.size() - 3); + if FK_YAML_UNLIKELY (tag_body.empty()) { + emit_error("verbatim tag(!) must not be empty."); + } + + bool is_valid_uri = uri_encoding::validate(tag_body.begin(), tag_body.end()); + if FK_YAML_UNLIKELY (!is_valid_uri) { + emit_error("invalid URI character is found in a verbatim tag."); + } + + return; } - return escaped; - } // LCOV_EXCL_LINE -private: - static bool convert_hexchar_to_byte(char source, uint8_t& byte) { - if ('0' <= source && source <= '9') { - // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions) - byte = static_cast(source - char('0')); - return true; + if (is_named_handle) { + char last = token.str.back(); + if FK_YAML_UNLIKELY (last == '!') { + // Tag shorthand must be followed by a non-empty suffix. + // See the "Tag Shorthands" section in https://yaml.org/spec/1.2.2/#691-node-tags. + emit_error("named handle has no suffix."); + } } - if ('A' <= source && source <= 'F') { - // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions) - byte = static_cast(source - 'A' + 10); - return true; - } + // get the position of last tag prefix character (!) to extract body of tag shorthands. + // tag shorthand is either primary(!tag), secondary(!!tag) or named(!handle!tag). + std::size_t last_tag_prefix_pos = token.str.find_last_of('!'); + FK_YAML_ASSERT(last_tag_prefix_pos != str_view::npos); - if ('a' <= source && source <= 'f') { - // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions) - byte = static_cast(source - 'a' + 10); - return true; + str_view tag_uri = token.str.substr(last_tag_prefix_pos + 1); + bool is_valid_uri = uri_encoding::validate(tag_uri.begin(), tag_uri.end()); + if FK_YAML_UNLIKELY (!is_valid_uri) { + emit_error("Invalid URI character is found in a named tag handle."); } - // The given character is not hexadecimal. - return false; - } - - static bool extract_codepoint(const char*& begin, const char* end, int bytes_to_read, char32_t& codepoint) { - bool has_enough_room = static_cast(std::distance(begin, end)) >= (bytes_to_read - 1); - if (!has_enough_room) { - return false; + // Tag shorthands cannot contain flow indicators({}[],). + // See the "Tag Shorthands" section in https://yaml.org/spec/1.2.2/#691-node-tags. + std::size_t invalid_char_pos = tag_uri.find_first_of("{}[],"); + if (invalid_char_pos != str_view::npos) { + emit_error("Tag shorthand cannot contain flow indicators({}[],)."); } + } - int read_size = bytes_to_read * 2; - uint8_t byte {0}; - codepoint = 0; + /// @brief Determines the range of single quoted scalar by scanning remaining input buffer contents. + /// @param token Storage for the range of single quoted scalar. + void determine_single_quoted_scalar_range(str_view& token) { + str_view sv {m_token_begin_itr, m_end_itr}; - for (int i = read_size - 1; i >= 0; i--) { - bool is_valid = convert_hexchar_to_byte(*++begin, byte); - if (!is_valid) { - return false; + std::size_t pos = sv.find('\''); + while (pos != str_view::npos) { + FK_YAML_ASSERT(pos < sv.size()); + if FK_YAML_LIKELY (pos == sv.size() - 1 || sv[pos + 1] != '\'') { + // closing single quote is found. + token = {m_token_begin_itr, pos}; + m_cur_itr = sv.begin() + (pos + 1); + return; } - // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions) - codepoint |= static_cast(byte << (4 * i)); + + // If single quotation marks are repeated twice in a single quoted scalar, they are considered as an + // escaped single quotation mark. Skip the second one which would otherwise be detected as a closing + // single quotation mark in the next loop. + pos = sv.find('\'', pos + 2); } - return true; + m_cur_itr = m_end_itr; // update for error information + emit_error("Invalid end of input buffer in a single-quoted scalar token."); } - static void unescape_escaped_unicode(char32_t codepoint, std::string& buff) { - std::array encode_buff {}; - uint32_t encoded_size {0}; - utf8::from_utf32(codepoint, encode_buff, encoded_size); - buff.append(reinterpret_cast(encode_buff.data()), encoded_size); - } -}; + /// @brief Determines the range of double quoted scalar by scanning remaining input buffer contents. + /// @param token Storage for the range of double quoted scalar. + void determine_double_quoted_scalar_range(str_view& token) { + str_view sv {m_token_begin_itr, m_end_itr}; -FK_YAML_DETAIL_NAMESPACE_END + std::size_t pos = sv.find('\"'); + while (pos != str_view::npos) { + FK_YAML_ASSERT(pos < sv.size()); -#endif /* FK_YAML_DETAIL_ENCODINGS_YAML_ESCAPER_HPP_ */ + bool is_closed = true; + if FK_YAML_LIKELY (pos > 0) { + // Double quotation marks can be escaped by a preceding backslash and the number of backslashes matters + // to determine if the found double quotation mark is escaped since the backslash itself can also be + // escaped: + // * odd number of backslashes -> double quotation mark IS escaped (e.g., "\\\"") + // * even number of backslashes -> double quotation mark IS NOT escaped (e.g., "\\"") + uint32_t backslash_counts = 0; + const char* p = m_token_begin_itr + (pos - 1); + do { + if (*p-- != '\\') { + break; + } + ++backslash_counts; + } while (p != m_token_begin_itr); + is_closed = ((backslash_counts & 1u) == 0); // true: even, false: odd + } -// #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_INPUT_POSITION_TRACKER_HPP_ -#define FK_YAML_DETAIL_INPUT_POSITION_TRACKER_HPP_ + if (is_closed) { + // closing double quote is found. + token = {m_token_begin_itr, pos}; + m_cur_itr = sv.begin() + (pos + 1); + return; + } -#include + pos = sv.find('\"', pos + 1); + } -// #include + m_cur_itr = m_end_itr; // update for error information + emit_error("Invalid end of input buffer in a double-quoted scalar token."); + } -// #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_STR_VIEW_HPP_ -#define FK_YAML_DETAIL_STR_VIEW_HPP_ + /// @brief Determines the range of plain scalar by scanning remaining input buffer contents. + /// @param token Storage for the range of plain scalar. + void determine_plain_scalar_range(str_view& token) { + str_view sv {m_token_begin_itr, m_end_itr}; -#include -#include + constexpr str_view filter = "\n :{}[],"; + std::size_t pos = sv.find_first_of(filter); + if FK_YAML_UNLIKELY (pos == str_view::npos) { + token = sv; + m_cur_itr = m_end_itr; + return; + } -// #include + bool ends_loop = false; + do { + FK_YAML_ASSERT(pos < sv.size()); + switch (sv[pos]) { + case '\n': + ends_loop = true; + break; + case ' ': + if FK_YAML_UNLIKELY (pos == sv.size() - 1) { + // trim trailing space. + ends_loop = true; + break; + } -// #include + // Allow a space in a plain scalar only if the space is surrounded by non-space characters, but not + // followed by the comment prefix " #". + // Also, flow indicators are not allowed to be followed after a space in a flow context. + // See https://yaml.org/spec/1.2.2/#733-plain-style for more details. + switch (sv[pos + 1]) { + case ' ': + case '\t': + case '\n': + case '#': + ends_loop = true; + break; + case ':': + // " :" is permitted in a plain style string token, but not when followed by a space. + ends_loop = (pos < sv.size() - 2) && (sv[pos + 2] == ' '); + break; + case '{': + case '}': + case '[': + case ']': + case ',': + ends_loop = (m_state & flow_context_bit); + break; + default: + break; + } + break; + case ':': + if FK_YAML_LIKELY (pos + 1 < sv.size()) { + switch (sv[pos + 1]) { + case ' ': + case '\t': + case '\n': + ends_loop = true; + break; + default: + break; + } + } + break; + case '{': + case '}': + case '[': + case ']': + case ',': + // This check is enabled only in a flow context. + ends_loop = (m_state & flow_context_bit); + break; + default: // LCOV_EXCL_LINE + break; // LCOV_EXCL_LINE + } -// #include + if (ends_loop) { + break; + } -// #include + pos = sv.find_first_of(filter, pos + 1); + } while (pos != str_view::npos); + token = sv.substr(0, pos); + m_cur_itr = token.end(); + } -FK_YAML_DETAIL_NAMESPACE_BEGIN + /// @brief Scan a block style string token either in the literal or folded style. + /// @param style The style of the given token, either literal or folded. + /// @param chomp The chomping indicator type of the given token, either strip, keep or clip. + /// @param indent The indent size specified for the given token. + void scan_block_style_string_token(uint32_t& indent, str_view& token) { + str_view sv {m_token_begin_itr, m_end_itr}; -/// @brief Non owning view into constant character sequence. -/// @note -/// This class is a minimal implementation of std::basic_string_view which has been available since C++17 -/// but pretty useful and efficient for referencing/investigating character sequences. -/// @warning -/// This class intentionally omits a lot of value checks to improve efficiency. Necessary checks should be -/// made before calling this class' APIs for safety. -/// @tparam CharT Character type -/// @tparam Traits Character traits type which defaults to std::char_traits. -template > -class basic_str_view { - static_assert(!std::is_array::value, "CharT must not be an array type."); - static_assert( - std::is_trivial::value && std::is_standard_layout::value, - "CharT must be a trivial, standard layout type."); - static_assert( - std::is_same::value, "CharT & Traits::char_type must be the same type."); + // Handle leading all-space lines. + constexpr str_view space_filter = " \t\n"; + std::size_t first_non_space_pos = sv.find_first_not_of(space_filter); + if (first_non_space_pos == str_view::npos) { + // empty block scalar with no subsequent tokens. + indent = static_cast(sv.size()); + token = sv; + + // Without the following iterator update, lexer cannot reach the end of input buffer and causes infinite + // loops from the next loop. (https://github.com/fktn-k/fkYAML/pull/410) + m_cur_itr = m_end_itr; + return; + } -public: - /// Character traits type. - using traits_type = Traits; - /// Character type. - using value_type = CharT; - /// Pointer type to a character. - using pointer = value_type*; - /// Constant pointer type to a character. - using const_pointer = const value_type*; - /// Reference type to a character. - using reference = value_type&; - /// Constant reference type to a character. - using const_reference = const value_type&; - /// Constant iterator type to a character. - using const_iterator = const value_type*; - /// Iterator type to a character. - /// (Always constant since this class isn't meant to provide any mutating features.) - using iterator = const_iterator; - /// Constant reverse iterator type to a character. - using const_reverse_iterator = std::reverse_iterator; - /// Reverse iterator type to a character. - /// (Always constant since this class isn't meant to provide any mutating features.) - using reverse_iterator = const_reverse_iterator; - /// Size type for character sequence sizes. - using size_type = std::size_t; - /// Difference type for distances between characters. - using difference_type = std::ptrdiff_t; + // get indentation of the first non-space character. + std::size_t last_newline_pos = sv.substr(0, first_non_space_pos).find_last_of('\n'); + if (last_newline_pos == str_view::npos) { + // first_non_space_pos in on the first line. + uint32_t cur_indent = static_cast(first_non_space_pos); + if (indent == 0) { + indent = cur_indent; + } + else if FK_YAML_UNLIKELY (cur_indent < indent) { + emit_error("A block style scalar is less indented than the indicated level."); + } - /// Invalid position value. - static constexpr size_type npos = static_cast(-1); + last_newline_pos = 0; + } + else { + FK_YAML_ASSERT(last_newline_pos < first_non_space_pos); + uint32_t cur_indent = static_cast(first_non_space_pos - last_newline_pos - 1); - /// Constructs a basic_str_view object. - basic_str_view() noexcept = default; + // TODO: preserve and compare the last indentation with `cur_indent` + if (indent == 0) { + indent = cur_indent; + } + else if FK_YAML_UNLIKELY (cur_indent < indent) { + emit_error("A block style scalar is less indented than the indicated level."); + } + } - /// Destroys a basic_str_view object. - ~basic_str_view() noexcept = default; + last_newline_pos = sv.find('\n', first_non_space_pos + 1); + if (last_newline_pos == str_view::npos) { + last_newline_pos = sv.size(); + } - /// @brief Copy constructs a basic_str_view object. - /// @param _ A basic_str_view object to copy from. - basic_str_view(const basic_str_view&) noexcept = default; + while (last_newline_pos < sv.size()) { + std::size_t cur_line_end_pos = sv.find('\n', last_newline_pos + 1); + if (cur_line_end_pos == str_view::npos) { + cur_line_end_pos = sv.size(); + } - /// @brief Move constructs a basic_str_view object. - /// @param _ A basic_str_view object to move from. - basic_str_view(basic_str_view&&) noexcept = default; + std::size_t cur_line_content_begin_pos = sv.find_first_not_of(' ', last_newline_pos + 1); + if (cur_line_content_begin_pos == str_view::npos) { + last_newline_pos = cur_line_end_pos; + continue; + } - /// @brief Constructs a basic_str_view object from a pointer to a character sequence. - /// @param p_str A pointer to a character sequence. (Must be null-terminated, or an undefined behavior.) - basic_str_view(const value_type* p_str) noexcept - : m_len(traits_type::length(p_str)), - mp_str(p_str) { - } + FK_YAML_ASSERT(last_newline_pos < cur_line_content_begin_pos); + uint32_t cur_indent = static_cast(cur_line_content_begin_pos - last_newline_pos - 1); + if (cur_indent < indent && sv[cur_line_content_begin_pos] != '\n') { + // Interpret less indented non-space characters as the start of the next token. + break; + } - /// @brief Construction from a null pointer is forbidden. - basic_str_view(std::nullptr_t) = delete; + last_newline_pos = cur_line_end_pos; + } - /// @brief Constructs a basic_str_view object from a poineter to a character sequence and its size. - /// @param p_str A pointer to a character sequence. (May or may not be null-terminated.) - /// @param len The length of a character sequence. - basic_str_view(const value_type* p_str, size_type len) noexcept - : m_len(len), - mp_str(p_str) { + // include last newline character if not all characters have been consumed yet. + if (last_newline_pos < sv.size()) { + ++last_newline_pos; + } + + token = sv.substr(0, last_newline_pos); + m_cur_itr = token.end(); } - /// @brief Constructs a basic_str_view object from compatible begin/end iterators - /// @tparam ItrType Iterator type to a character. - /// @param first The iterator to the first element of a character sequence. - /// @param last The iterator to the past-the-end of a character sequence. - template < - typename ItrType, - enable_if_t< - conjunction< - is_iterator_of, - std::is_base_of< - std::random_access_iterator_tag, typename std::iterator_traits::iterator_category>>::value, - int> = 0> - basic_str_view(ItrType first, ItrType last) noexcept - : m_len(last - first), - mp_str(m_len > 0 ? &*first : nullptr) { + /// @brief Handle unescaped control characters. + /// @param c A target character. + void handle_unescaped_control_char(char c) const { + FK_YAML_ASSERT(0x00 <= c && c <= 0x1F); + + switch (c) { + // 0x00(NULL) has already been handled above. + case 0x01: + emit_error("Control character U+0001 (SOH) must be escaped to \\u0001."); + case 0x02: + emit_error("Control character U+0002 (STX) must be escaped to \\u0002."); + case 0x03: + emit_error("Control character U+0003 (ETX) must be escaped to \\u0003."); + case 0x04: + emit_error("Control character U+0004 (EOT) must be escaped to \\u0004."); + case 0x05: + emit_error("Control character U+0005 (ENQ) must be escaped to \\u0005."); + case 0x06: + emit_error("Control character U+0006 (ACK) must be escaped to \\u0006."); + case 0x07: + emit_error("Control character U+0007 (BEL) must be escaped to \\a or \\u0007."); + case 0x08: + emit_error("Control character U+0008 (BS) must be escaped to \\b or \\u0008."); + case 0x09: // HT + // horizontal tabs (\t) are safe to use without escaping. + break; + // 0x0A(LF) has already been handled above. + case 0x0B: + emit_error("Control character U+000B (VT) must be escaped to \\v or \\u000B."); + case 0x0C: + emit_error("Control character U+000C (FF) must be escaped to \\f or \\u000C."); + // 0x0D(CR) has already been handled above. + case 0x0E: + emit_error("Control character U+000E (SO) must be escaped to \\u000E."); + case 0x0F: + emit_error("Control character U+000F (SI) must be escaped to \\u000F."); + case 0x10: + emit_error("Control character U+0010 (DLE) must be escaped to \\u0010."); + case 0x11: + emit_error("Control character U+0011 (DC1) must be escaped to \\u0011."); + case 0x12: + emit_error("Control character U+0012 (DC2) must be escaped to \\u0012."); + case 0x13: + emit_error("Control character U+0013 (DC3) must be escaped to \\u0013."); + case 0x14: + emit_error("Control character U+0014 (DC4) must be escaped to \\u0014."); + case 0x15: + emit_error("Control character U+0015 (NAK) must be escaped to \\u0015."); + case 0x16: + emit_error("Control character U+0016 (SYN) must be escaped to \\u0016."); + case 0x17: + emit_error("Control character U+0017 (ETB) must be escaped to \\u0017."); + case 0x18: + emit_error("Control character U+0018 (CAN) must be escaped to \\u0018."); + case 0x19: + emit_error("Control character U+0019 (EM) must be escaped to \\u0019."); + case 0x1A: + emit_error("Control character U+001A (SUB) must be escaped to \\u001A."); + case 0x1B: + emit_error("Control character U+001B (ESC) must be escaped to \\e or \\u001B."); + case 0x1C: + emit_error("Control character U+001C (FS) must be escaped to \\u001C."); + case 0x1D: + emit_error("Control character U+001D (GS) must be escaped to \\u001D."); + case 0x1E: + emit_error("Control character U+001E (RS) must be escaped to \\u001E."); + case 0x1F: + emit_error("Control character U+001F (US) must be escaped to \\u001F."); + } } - /// @brief Constructs a basic_str_view object from a compatible std::basic_string object. - /// @param str A compatible character sequence container. - basic_str_view(const std::basic_string& str) noexcept - : m_len(str.length()), - mp_str(str.data()) { + /// @brief Checks if the given scalar contains no unescaped control characters. + /// @param scalar Scalar contents. + void check_scalar_content(str_view scalar) const { + for (auto c : scalar) { + if (0 <= c && c < 0x20) { + handle_unescaped_control_char(c); + } + } } - /// @brief Copy assignment operator for this basic_str_view class. - /// @param _ A basic_str_view object to copy from. - /// @return Reference to this basic_str_view object. - basic_str_view& operator=(const basic_str_view&) noexcept = default; - - /// @brief Move assignment operator for this basic_str_view class. - /// @param _ A basic_str_view object to move from. - /// @return Reference to this basic_str_view object. - basic_str_view& operator=(basic_str_view&&) noexcept = default; - - /// @brief Get the iterator to the first element. (Always constant) - /// @return The iterator to the first element. - const_iterator begin() const noexcept { - return mp_str; - } + /// @brief Gets the metadata of a following block style string scalar. + /// @param chomp_type A variable to store the retrieved chomping style type. + /// @param indent A variable to store the retrieved indent size. + /// @return Block scalar header information converted from the header line. + block_scalar_header convert_to_block_scalar_header(str_view& line) { + constexpr str_view comment_prefix = " #"; + std::size_t comment_begin_pos = line.find(comment_prefix); + if (comment_begin_pos != str_view::npos) { + line = line.substr(0, comment_begin_pos); + } - /// @brief Get the iterator to the past-the-end element. (Always constant) - /// @return The iterator to the past-the-end element. - const_iterator end() const noexcept { - return mp_str + m_len; - } + if (line.empty()) { + return {}; + } - /// @brief Get the iterator to the first element. (Always constant) - /// @return The iterator to the first element. - const_iterator cbegin() const noexcept { - return mp_str; - } + block_scalar_header header {}; + for (const char c : line) { + switch (c) { + case '-': + if FK_YAML_UNLIKELY (header.chomp != chomping_indicator_t::CLIP) { + emit_error("Too many block chomping indicators specified."); + } + header.chomp = chomping_indicator_t::STRIP; + break; + case '+': + if FK_YAML_UNLIKELY (header.chomp != chomping_indicator_t::CLIP) { + emit_error("Too many block chomping indicators specified."); + } + header.chomp = chomping_indicator_t::KEEP; + break; + case '0': + emit_error("An indentation level for a block scalar cannot be 0."); + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if FK_YAML_UNLIKELY (header.indent > 0) { + emit_error("Invalid indentation level for a block scalar. It must be between 1 and 9."); + } + header.indent = static_cast(c - '0'); + break; + case ' ': + case '\t': + break; + default: + emit_error("Invalid character found in a block scalar header."); + } + } - /// @brief Get the iterator to the past-the-end element. (Always constant) - /// @return The iterator to the past-the-end element. - const_iterator cend() const noexcept { - return mp_str + m_len; + return header; } - /// @brief Get the iterator to the first element in the reverse order. (Always constant) - /// @return The iterator to the first element in the reverse order. - const_reverse_iterator rbegin() const noexcept { - return const_reverse_iterator(end()); + /// @brief Skip white spaces (half-width spaces and tabs) from the current position. + void skip_white_spaces() { + m_cur_itr = std::find_if_not(m_cur_itr, m_end_itr, [](char c) { return (c == ' ' || c == '\t'); }); } - /// @brief Get the iterator to the past-the-end element in the reverse order. (Always constant) - /// @return The iterator to the past-the-end element in the reverse order. - const_reverse_iterator rend() const noexcept { - return const_reverse_iterator(begin()); + /// @brief Skip white spaces and newline codes (CR/LF) from the current position. + void skip_white_spaces_and_newline_codes() { + if (m_cur_itr != m_end_itr) { + m_cur_itr = std::find_if_not(m_cur_itr, m_end_itr, [](char c) { + switch (c) { + case ' ': + case '\t': + case '\n': + return true; + default: + return false; + } + }); + } } - /// @brief Get the iterator to the first element in the reverse order. (Always constant) - /// @return The iterator to the first element in the reverse order. - const_reverse_iterator crbegin() const noexcept { - return const_reverse_iterator(end()); + /// @brief Skip the rest in the current line. + void skip_until_line_end() { + while (m_cur_itr != m_end_itr) { + switch (*m_cur_itr) { + case '\n': + ++m_cur_itr; + return; + default: + ++m_cur_itr; + break; + } + } } - /// @brief Get the iterator to the past-the-end element in the reverse order. (Always constant) - /// @return The iterator to the past-the-end element in the reverse order. - const_reverse_iterator crend() const noexcept { - return const_reverse_iterator(begin()); + /// @brief Emits an error with the given message. + /// @param msg A message for the resulting error. + [[noreturn]] void emit_error(const char* msg) const { + m_pos_tracker.update_position(m_cur_itr); + throw fkyaml::parse_error(msg, m_pos_tracker.get_lines_read(), m_pos_tracker.get_cur_pos_in_line()); } - /// @brief Get the size of the referenced character sequence. - /// @return The size of the referenced character sequence. - size_type size() const noexcept { - return m_len; - } +private: + /// An input buffer adapter to be analyzed. + str_view m_input_buffer {}; + /// The iterator to the current character in the input buffer. + const char* m_cur_itr {}; + /// The iterator to the beginning of the current token. + const char* m_token_begin_itr {}; + /// The iterator to the past-the-end element in the input buffer. + const char* m_end_itr {}; + /// The current position tracker of the input buffer. + mutable position_tracker m_pos_tracker {}; + /// The last yaml version. + str_view m_yaml_version {}; + /// The last tag handle. + str_view m_tag_handle {}; + /// The last tag prefix. + str_view m_tag_prefix {}; + /// The last block scalar header. + block_scalar_header m_block_scalar_header {}; + /// The beginning position of the last lexical token. (zero origin) + uint32_t m_last_token_begin_pos {0}; + /// The beginning line of the last lexical token. (zero origin) + uint32_t m_last_token_begin_line {0}; + /// The current depth of flow context. + uint32_t m_state {0}; +}; - /// @brief Get the size of the referenced character sequence. - /// @return The size of the referenced character sequence. - size_type length() const noexcept { - return m_len; - } +FK_YAML_DETAIL_NAMESPACE_END - /// @brief Get the maximum number of the character sequence size. - /// @return The maximum number of the character sequence size. - constexpr size_type max_size() const noexcept { - return static_cast(std::numeric_limits::max()); - } +#endif /* FK_YAML_DETAIL_INPUT_LEXICAL_ANALYZER_HPP */ - /// @brief Checks if the referenced character sequence is empty. - /// @return true if empty, false otherwise. - bool empty() const noexcept { - return m_len == 0; - } +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT - /// @brief Get the element at the given position. - /// @param pos The position of the target element. - /// @return The element at the given position. - const_reference operator[](size_type pos) const noexcept { - return *(mp_str + pos); - } +#ifndef FK_YAML_DETAIL_INPUT_SCALAR_PARSER_HPP +#define FK_YAML_DETAIL_INPUT_SCALAR_PARSER_HPP - /// @brief Get the element at the given position with bounds checks. - /// @warning Throws an fkyaml::out_of_range exception if the position exceeds the character sequence size. - /// @param pos The position of the target element. - /// @return The element at the given position. - const_reference at(size_type pos) const { - if FK_YAML_UNLIKELY (pos >= m_len) { - throw fkyaml::out_of_range(static_cast(pos)); - } - return *(mp_str + pos); - } +// #include - /// @brief Get the first element. - /// @return The first element. - const_reference front() const noexcept { - return *mp_str; - } +// #include - /// @brief Get the last element. - /// @return The last element. - const_reference back() const { - return *(mp_str + m_len - 1); - } +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT - /// @brief Get the pointer to the raw data of referenced character sequence. - /// @return The pointer to the raw data of referenced character sequence. - const_pointer data() const noexcept { - return mp_str; - } +// **NOTE FOR LIBARARY DEVELOPERS**: +// Implementations in this header file are intentionally optimized for conversions between YAML scalars and native C++ +// types. So, some implementations don't follow the convensions in the standard C++ functions. For example, octals must +// begin with "0o" (not "0"), which is specified in the YAML spec 1.2. - /// @brief Moves the beginning position by `n` elements. - /// @param n The number of elements by which to move the beginning position. - void remove_prefix(size_type n) noexcept { - mp_str += n; - m_len -= n; - } +#ifndef FK_YAML_CONVERSIONS_SCALAR_CONV_HPP +#define FK_YAML_CONVERSIONS_SCALAR_CONV_HPP - /// @brief Shrinks the referenced character sequence from the last by `n` elements. - /// @param n The number of elements by which to shrink the sequence from the last. - void remove_suffix(size_type n) noexcept { - m_len -= n; - } +#include +#include +#include - /// @brief Swaps data with the given basic_str_view object. - /// @param other A basic_str_view object to swap data with. - void swap(basic_str_view& other) noexcept { - auto tmp = *this; - *this = other; - other = tmp; - } +// #include - /// @brief Copys the referenced character sequence values from `pos` by `n` size. - /// @warning Throws an fkyaml::out_of_range exception if the given `pos` is bigger than the lenth. - /// @param p_str The pointer to a character sequence buffer for output. - /// @param n The number of elements to write into `p_str`. - /// @param pos The offset of the beginning position to copy values. - /// @return The number of elements to be written into `p_str`. - size_type copy(CharT* p_str, size_type n, size_type pos = 0) const { - if FK_YAML_UNLIKELY (pos > m_len) { - throw fkyaml::out_of_range(static_cast(pos)); - } - const size_type rlen = std::min(n, m_len - pos); - traits_type::copy(p_str, mp_str + pos, rlen); - return rlen; - } +// #include - /// @brief Constructs a sub basic_str_view object from `pos` by `n` size. - /// @warning Throws an fkyaml::out_of_range exception if the given `pos` is bigger than the lenth. - /// @param pos The offset of the beginning position. - /// @param n The number of elements to the end of a new sub basic_str_view object. - /// @return A newly created sub basic_str_view object. - basic_str_view substr(size_type pos = 0, size_type n = npos) const { - if FK_YAML_UNLIKELY (pos > m_len) { - throw fkyaml::out_of_range(static_cast(pos)); - } - const size_type rlen = std::min(n, m_len - pos); - return basic_str_view(mp_str + pos, rlen); - } - /// @brief Compares the referenced character sequence values with the given basic_str_view object. - /// @param sv The basic_str_view object to compare with. - /// @return The lexicographical comparison result. The values are same as std::strncmp(). - int compare(basic_str_view sv) const noexcept { - const size_type rlen = std::min(m_len, sv.m_len); - int ret = traits_type::compare(mp_str, sv.mp_str, rlen); +#if FK_YAML_HAS_TO_CHARS +// Prefer std::to_chars() and std::from_chars() functions if available. +#include +#else +// Fallback to legacy string conversion functions otherwise. +#include // std::stof(), std::stod(), std::stold() +#endif - if (ret == 0) { - using int_limits = std::numeric_limits; - difference_type diff = - m_len > sv.m_len ? m_len - sv.m_len : difference_type(-1) * difference_type(sv.m_len - m_len); +FK_YAML_DETAIL_NAMESPACE_BEGIN - if (diff > int_limits::max()) { - ret = int_limits::max(); - } - else if (diff < int_limits::min()) { - ret = int_limits::min(); - } - else { - ret = static_cast(diff); - } - } +////////////////////////// +// conv_limits_base // +////////////////////////// - return ret; - } +/// @brief A structure which provides limits for conversions between scalars and integers. +/// @note This structure contains common limits in both signed and unsigned integers. +/// @tparam NumBytes The number of bytes for the integer type. +template +struct conv_limits_base {}; - /// @brief Compares the referenced character sequence values from `pos1` by `n1` characters with `sv`. - /// @param pos1 The offset of the beginning element. - /// @param n1 The length of character sequence used for comparison. - /// @param sv A basic_str_view object to compare with. - /// @return The lexicographical comparison result. The values are same as std::strncmp(). - int compare(size_type pos1, size_type n1, basic_str_view sv) const { - return substr(pos1, n1).compare(sv); - } +/// @brief The specialization of conv_limits_base for 1 byte integers, e.g., int8_t, uint8_t. +template <> +struct conv_limits_base<1u> { + /// max characters for octals (0o377) without the prefix part. + static constexpr std::size_t max_chars_oct = 3; + /// max characters for hexadecimals (0xFF) without the prefix part. + static constexpr std::size_t max_chars_hex = 2; - /// @brief Compares the referenced character sequence value from `pos1` by `n1` characters with `sv` from `pos2` by - /// `n2` characters. - /// @param pos1 The offset of the beginning element in this character sequence. - /// @param n1 The length of this character sequence used for comparison. - /// @param sv A basic_str_view object to compare with. - /// @param pos2 The offset of the beginning element in `sv`. - /// @param n2 The length of `sv` used for comparison. - /// @return The lexicographical comparison result. The values are same as std::strncmp(). - int compare(size_type pos1, size_type n1, basic_str_view sv, size_type pos2, size_type n2) const { - return substr(pos1, n1).compare(sv.substr(pos2, n2)); + /// @brief Check if the given octals are safely converted into 1 byte integer. + /// @param octs The pointer to octal characters + /// @param len The length of octal characters + /// @return true is safely convertible, false otherwise. + static bool check_if_octs_safe(const char* octs, std::size_t len) noexcept { + return (len < max_chars_oct) || (len == max_chars_oct && octs[0] <= '3'); } - /// @brief Compares the referenced character sequence with `s` character sequence. - /// @param s The pointer to a character sequence to compare with. - /// @return The lexicolographical comparison result. The values are same as std::strncmp(). - int compare(const CharT* s) const { - return compare(basic_str_view(s)); + /// @brief Check if the given hexadecimals are safely converted into 1 byte integer. + /// @param octs The pointer to hexadecimal characters + /// @param len The length of hexadecimal characters + /// @return true is safely convertible, false otherwise. + static bool check_if_hexs_safe(const char* /*unused*/, std::size_t len) noexcept { + return len <= max_chars_hex; } +}; - /// @brief Compares the referenced character sequence from `pos1` by `n1` characters with `s` character sequence. - /// @param pos1 The offset of the beginning element in this character sequence. - /// @param n1 The length of this character sequence used fo comparison. - /// @param s The pointer to a character sequence to compare with. - /// @return The lexicographical comparison result. The values are same as std::strncmp(). - int compare(size_type pos1, size_type n1, const CharT* s) const { - return substr(pos1, n1).compare(basic_str_view(s)); - } +/// @brief The specialization of conv_limits_base for 2 byte integers, e.g., int16_t, uint16_t. +template <> +struct conv_limits_base<2u> { + /// max characters for octals (0o177777) without the prefix part. + static constexpr std::size_t max_chars_oct = 6; + /// max characters for hexadecimals (0xFFFF) without the prefix part. + static constexpr std::size_t max_chars_hex = 4; - /// @brief Compares the referenced character sequence from `pos1` by `n1` characters with `s` character sequence by - /// `n2` characters. - /// @param pos1 The offset of the beginning element in this character sequence. - /// @param n1 The length of this character sequence used fo comparison. - /// @param s The pointer to a character sequence to compare with. - /// @param n2 The length of `s` used fo comparison. - /// @return - int compare(size_type pos1, size_type n1, const CharT* s, size_type n2) const { - return substr(pos1, n1).compare(basic_str_view(s, n2)); + /// @brief Check if the given octals are safely converted into 2 byte integer. + /// @param octs The pointer to octal characters + /// @param len The length of octal characters + /// @return true is safely convertible, false otherwise. + static bool check_if_octs_safe(const char* octs, std::size_t len) noexcept { + return (len < max_chars_oct) || (len == max_chars_oct && octs[0] <= '1'); } - /// @brief Checks if this character sequence starts with `sv` characters. - /// @param sv The character sequence to compare with. - /// @return true if the character sequence starts with `sv` characters, false otherwise. - bool starts_with(basic_str_view sv) const noexcept { - return substr(0, sv.size()) == sv; + /// @brief Check if the given hexadecimals are safely converted into 2 byte integer. + /// @param octs The pointer to hexadecimal characters + /// @param len The length of hexadecimal characters + /// @return true is safely convertible, false otherwise. + static bool check_if_hexs_safe(const char* /*unused*/, std::size_t len) noexcept { + return len <= max_chars_hex; } +}; - /// @brief Checks if this character sequence starts with `c` character. - /// @param c The character to compare with. - /// @return true if the character sequence starts with `c` character, false otherwise. - bool starts_with(CharT c) const noexcept { - return !empty() && traits_type::eq(front(), c); - } +/// @brief The specialization of conv_limits_base for 4 byte integers, e.g., int32_t, uint32_t. +template <> +struct conv_limits_base<4u> { + /// max characters for octals (0o37777777777) without the prefix part. + static constexpr std::size_t max_chars_oct = 11; + /// max characters for hexadecimals (0xFFFFFFFF) without the prefix part. + static constexpr std::size_t max_chars_hex = 8; - /// @brief Checks if this character sequence starts with `s` characters. - /// @param s The character sequence to compare with. - /// @return true if the character sequence starts with `s` characters, false otherwise. - bool starts_with(const CharT* s) const noexcept { - return starts_with(basic_str_view(s)); + /// @brief Check if the given octals are safely converted into 4 byte integer. + /// @param octs The pointer to octal characters + /// @param len The length of octal characters + /// @return true is safely convertible, false otherwise. + static bool check_if_octs_safe(const char* octs, std::size_t len) noexcept { + return (len < max_chars_oct) || (len == max_chars_oct && octs[0] <= '3'); } - /// @brief Checks if this character sequence ends with `sv` characters. - /// @param sv The character sequence to compare with. - /// @return true if the character sequence ends with `sv` characters, false otherwise. - bool ends_with(basic_str_view sv) const noexcept { - const size_type size = m_len; - const size_type sv_size = sv.size(); - return size >= sv_size && traits_type::compare(end() - sv_size, sv.data(), sv_size) == 0; + /// @brief Check if the given hexadecimals are safely converted into 4 byte integer. + /// @param octs The pointer to hexadecimal characters + /// @param len The length of hexadecimal characters + /// @return true is safely convertible, false otherwise. + static bool check_if_hexs_safe(const char* /*unused*/, std::size_t len) noexcept { + return len <= max_chars_hex; } +}; - /// @brief Checks if this character sequence ends with `c` character. - /// @param c The character to compare with. - /// @return true if the character sequence ends with `c` character, false otherwise. - bool ends_with(CharT c) const noexcept { - return !empty() && traits_type::eq(back(), c); +/// @brief The specialization of conv_limits_base for 8 byte integers, e.g., int64_t, uint64_t. +template <> +struct conv_limits_base<8u> { + /// max characters for octals (0o1777777777777777777777) without the prefix part. + static constexpr std::size_t max_chars_oct = 22; + /// max characters for hexadecimals (0xFFFFFFFFFFFFFFFF) without the prefix part. + static constexpr std::size_t max_chars_hex = 16; + + /// @brief Check if the given octals are safely converted into 8 byte integer. + /// @param octs The pointer to octal characters + /// @param len The length of octal characters + /// @return true is safely convertible, false otherwise. + static bool check_if_octs_safe(const char* octs, std::size_t len) noexcept { + return (len < max_chars_oct) || (len == max_chars_oct && octs[0] <= '1'); } - /// @brief Checks if this character sequence ends with `s` characters. - /// @param s The character sequence to compare with. - /// @return true if the character sequence ends with `s` characters, false otherwise. - bool ends_with(const CharT* s) const noexcept { - return ends_with(basic_str_view(s)); + /// @brief Check if the given hexadecimals are safely converted into 8 byte integer. + /// @param octs The pointer to hexadecimal characters + /// @param len The length of hexadecimal characters + /// @return true is safely convertible, false otherwise. + static bool check_if_hexs_safe(const char* /*unused*/, std::size_t len) noexcept { + return len <= max_chars_hex; } +}; - /// @brief Checks if this character sequence contains `sv` characters. - /// @param sv The character sequence to compare with. - /// @return true if the character sequence contains `sv` characters, false otherwise. - bool contains(basic_str_view sv) const noexcept { - return find(sv) != npos; +///////////////////// +// conv_limits // +///////////////////// + +/// @brief A structure which provides limits for conversions between scalars and integers. +/// @note This structure contains limits which differs based on signedness. +/// @tparam NumBytes The number of bytes for the integer type. +/// @tparam IsSigned Whether an integer is signed or unsigned +template +struct conv_limits {}; + +/// @brief The specialization of conv_limits for 1 byte signed integers, e.g., int8_t. +template <> +struct conv_limits<1u, true> : conv_limits_base<1u> { + /// with or without sign. + static constexpr bool is_signed = true; + + /// max characters for decimals (-128..127) without sign. + static constexpr std::size_t max_chars_dec = 3; + + /// string representation of max decimal value. + static const char* max_value_chars_dec() noexcept { + // Making this function a static constexpr variable, a link error happens. + // Although the issue has been fixed since C++17, this workaround is necessary to let this functionality work + // with C++11 (the library's default C++ standard version). + // The same thing is applied to similar functions in the other specializations. + + static constexpr char max_value_chars[] = "127"; + return &max_value_chars[0]; } - /// @brief Checks if this character sequence contains `c` character. - /// @param c The character to compare with. - /// @return true if the character sequence contains `c` character, false otherwise. - bool contains(CharT c) const noexcept { - return find(c) != npos; + /// string representation of min decimal value without sign. + static const char* min_value_chars_dec() noexcept { + static constexpr char min_value_chars[] = "128"; + return &min_value_chars[0]; } +}; - /// @brief Checks if this character sequence contains `s` characters. - /// @param s The character sequence to compare with. - /// @return true if the character sequence contains `s` characters, false otherwise. - bool contains(const CharT* s) const noexcept { - return find(s) != npos; +/// @brief The specialization of conv_limits for 1 byte unsigned integers, e.g., uint8_t. +template <> +struct conv_limits<1u, false> : conv_limits_base<1u> { + /// with or without sign. + static constexpr bool is_signed = false; + + /// max characters for decimals (0..255) without sign. + static constexpr std::size_t max_chars_dec = 3; + + /// string representation of max decimal value. + static const char* max_value_chars_dec() noexcept { + static constexpr char max_value_chars[] = "255"; + return &max_value_chars[0]; } - /// @brief Finds the beginning position of `sv` characters in this referenced character sequence. - /// @param sv The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of `sv` characters, `npos` otherwise. - size_type find(basic_str_view sv, size_type pos = 0) const noexcept { - return find(sv.mp_str, pos, sv.m_len); + /// string representation of min decimal value. + static const char* min_value_chars_dec() noexcept { + static constexpr char min_value_chars[] = "0"; + return &min_value_chars[0]; } +}; - /// @brief Finds the beginning position of `c` character in this referenced character sequence. - /// @param sv The character to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of `c` character, `npos` otherwise. - size_type find(CharT c, size_type pos = 0) const noexcept { - size_type ret = npos; +/// @brief The specialization of conv_limits for 2 byte signed integers, e.g., int16_t. +template <> +struct conv_limits<2u, true> : conv_limits_base<2u> { + /// with or without sign. + static constexpr bool is_signed = true; - if FK_YAML_LIKELY (pos < m_len) { - const size_type n = m_len - pos; - const CharT* p_found = traits_type::find(mp_str + pos, n, c); - if (p_found) { - ret = p_found - mp_str; - } - } + /// max characters for decimals (-32768..32767) without sign. + static constexpr std::size_t max_chars_dec = 5; - return ret; + /// string representation of max decimal value. + static const char* max_value_chars_dec() noexcept { + static constexpr char max_value_chars[] = "32767"; + return &max_value_chars[0]; } - /// @brief Finds the beginning position of `s` character sequence by `n` characters in this referenced character - /// sequence. - /// @param s The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @param n The length of `s` character sequence used for comparison. - /// @return The beginning position of `s` characters, `npos` otherwise. - size_type find(const CharT* s, size_type pos, size_type n) const noexcept { - if FK_YAML_UNLIKELY (n == 0) { - return pos <= m_len ? pos : npos; - } + /// string representation of min decimal value without sign. + static const char* min_value_chars_dec() noexcept { + static constexpr char min_value_chars[] = "32768"; + return &min_value_chars[0]; + } +}; - if FK_YAML_UNLIKELY (pos >= m_len) { - return npos; - } +/// @brief The specialization of conv_limits for 2 byte unsigned integers, e.g., uint16_t. +template <> +struct conv_limits<2u, false> : conv_limits_base<2u> { + /// with or without sign. + static constexpr bool is_signed = false; - CharT s0 = s[0]; - const CharT* p_first = mp_str + pos; - const CharT* p_last = mp_str + m_len; - size_type len = m_len - pos; + /// max characters for decimals (0..65535) without sign. + static constexpr std::size_t max_chars_dec = 5; - while (len >= n) { - // find the first occurence of s0 - p_first = traits_type::find(p_first, len - n + 1, s0); - if (!p_first) { - return npos; - } + /// string representation of max decimal value. + static const char* max_value_chars_dec() noexcept { + static constexpr char max_value_chars[] = "65535"; + return &max_value_chars[0]; + } - // compare the full strings from the first occurence of s0 - if (traits_type::compare(p_first, s, n) == 0) { - return p_first - mp_str; - } + /// string representation of min decimal value. + static const char* min_value_chars_dec() noexcept { + static constexpr char min_value_chars[] = "0"; + return &min_value_chars[0]; + } +}; - len = p_last - (++p_first); - } +/// @brief The specialization of conv_limits for 4 byte signed integers, e.g., int32_t. +template <> +struct conv_limits<4u, true> : conv_limits_base<4u> { + /// with or without sign. + static constexpr bool is_signed = true; - return npos; - } + /// max characters for decimals (-2147483648..2147483647) without sign. + static constexpr std::size_t max_chars_dec = 10; - /// @brief Finds the beginning position of `s` character sequence in this referenced character sequence. - /// @param s The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of `s` characters, `npos` otherwise. - size_type find(const CharT* s, size_type pos = 0) const noexcept { - return find(basic_str_view(s), pos); + /// string representation of max decimal value. + static const char* max_value_chars_dec() noexcept { + static constexpr char max_value_chars[] = "2147483647"; + return &max_value_chars[0]; } - /// @brief Retrospectively finds the beginning position of `sv` characters in this referenced character sequence. - /// @param sv The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of `sv` characters, `npos` otherwise. - size_type rfind(basic_str_view sv, size_type pos = npos) const noexcept { - return rfind(sv.mp_str, pos, sv.m_len); + /// string representation of min decimal value without sign. + static const char* min_value_chars_dec() noexcept { + static constexpr char min_value_chars[] = "2147483648"; + return &min_value_chars[0]; } +}; - /// @brief Retrospectively finds the beginning position of `c` character in this referenced character sequence. - /// @param sv The character to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of `c` character, `npos` otherwise. - size_type rfind(CharT c, size_type pos = npos) const noexcept { - if FK_YAML_UNLIKELY (m_len == 0) { - return npos; - } +/// @brief The specialization of conv_limits for 4 byte unsigned integers, e.g., uint32_t. +template <> +struct conv_limits<4u, false> : conv_limits_base<4u> { + /// with or without sign. + static constexpr bool is_signed = false; - size_type idx = pos; - if (pos >= m_len) { - idx = m_len - 1; - } + /// max characters for decimals (0..4294967295) without sign. + static constexpr std::size_t max_chars_dec = 10; - do { - if (traits_type::eq(mp_str[idx], c)) { - return idx; - } - } while (idx > 0 && --idx < m_len); + /// string representation of max decimal value. + static const char* max_value_chars_dec() noexcept { + static constexpr char max_value_chars[] = "4294967295"; + return &max_value_chars[0]; + } - return npos; + /// string representation of min decimal value. + static const char* min_value_chars_dec() noexcept { + static constexpr char min_value_chars[] = "0"; + return &min_value_chars[0]; } +}; - /// @brief Retrospectively finds the beginning position of `s` character sequence by `n` characters in this - /// referenced character sequence. - /// @param s The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @param n The length of `s` character sequence used for comparison. - /// @return The beginning position of `s` characters, `npos` otherwise. - size_type rfind(const CharT* s, size_type pos, size_type n) const noexcept { - if FK_YAML_LIKELY (n <= m_len) { - pos = std::min(m_len - n, pos) + 1; +/// @brief The specialization of conv_limits for 8 byte signed integers, e.g., int64_t. +template <> +struct conv_limits<8u, true> : conv_limits_base<8u> { + /// with or without sign. + static constexpr bool is_signed = true; - do { - if (traits_type::compare(mp_str + --pos, s, n) == 0) { - return pos; - } - } while (pos > 0); - } + /// max characters for decimals (-9223372036854775808..9223372036854775807) without sign. + static constexpr std::size_t max_chars_dec = 19; - return npos; + /// string representation of max decimal value. + static const char* max_value_chars_dec() noexcept { + static constexpr char max_value_chars[] = "9223372036854775807"; + return &max_value_chars[0]; } - /// @brief Retrospectively finds the beginning position of `s` character sequence in this referenced character - /// sequence. - /// @param s The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of `s` characters, `npos` otherwise. - size_type rfind(const CharT* s, size_type pos = npos) const noexcept { - return rfind(basic_str_view(s), pos); + /// string representation of min decimal value without sign. + static const char* min_value_chars_dec() noexcept { + static constexpr char min_value_chars[] = "9223372036854775808"; + return &min_value_chars[0]; } +}; - /// @brief Finds the first occurence of `sv` character sequence in this referenced character sequence. - /// @param sv The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of `sv` characters, `npos` otherwise. - size_type find_first_of(basic_str_view sv, size_type pos = 0) const noexcept { - return find_first_of(sv.mp_str, pos, sv.m_len); +/// @brief The specialization of conv_limits for 8 byte unsigned integers, e.g., uint64_t. +template <> +struct conv_limits<8u, false> : conv_limits_base<8u> { + /// with or without sign. + static constexpr bool is_signed = false; + + /// max characters for decimals (0..18446744073709551615) without sign. + static constexpr std::size_t max_chars_dec = 20; + + /// string representation of max decimal value. + static const char* max_value_chars_dec() noexcept { + static constexpr char max_value_chars[] = "18446744073709551615"; + return &max_value_chars[0]; } - /// @brief Finds the first occurence of `c` character in this referenced character sequence. - /// @param c The character to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of `c` character, `npos` otherwise. - size_type find_first_of(CharT c, size_type pos = 0) const noexcept { - return find(c, pos); + /// string representation of min decimal value. + static const char* min_value_chars_dec() noexcept { + static constexpr char min_value_chars[] = "0"; + return &min_value_chars[0]; } +}; - /// @brief Finds the first occurence of `s` character sequence by `n` characters in this referenced character - /// sequence. - /// @param s The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @param n The length of `s` character sequence used for comparison. - /// @return The beginning position of `s` characters, `npos` otherwise. - size_type find_first_of(const CharT* s, size_type pos, size_type n) const noexcept { - if FK_YAML_UNLIKELY (n == 0) { - return npos; - } +////////////////////////// +// scalar <--> null // +////////////////////////// - for (size_type idx = pos; idx < m_len; ++idx) { - const CharT* p_found = traits_type::find(s, n, mp_str[idx]); - if (p_found) { - return idx; - } - } +/// @brief Converts a scalar into a null value +/// @tparam CharItr Type of char iterators. Its value type must be `char` (maybe cv-qualified). +/// @param begin The iterator to the first element of the scalar. +/// @param end The iterator to the past-the-end element of the scalar. +/// @param /*unused*/ The null value holder (unused since it can only have `nullptr`) +/// @return true if the conversion completes successfully, false otherwise. +template +inline bool aton(CharItr begin, CharItr end, std::nullptr_t& /*unused*/) noexcept { + static_assert(is_iterator_of::value, "aton() accepts iterators for char type"); - return npos; + if FK_YAML_UNLIKELY (begin == end) { + return false; } - /// @brief Finds the first occurence of `s` character sequence in this referenced character sequence. - /// @param s The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of `s` characters, `npos` otherwise. - size_type find_first_of(const CharT* s, size_type pos = 0) const noexcept { - return find_first_of(basic_str_view(s), pos); - } + uint32_t len = static_cast(std::distance(begin, end)); - /// @brief Finds the last occurence of `sv` character sequence in this referenced character sequence. - /// @param sv The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of `sv` characters, `npos` otherwise. - size_type find_last_of(basic_str_view sv, size_type pos = npos) const noexcept { - return find_last_of(sv.mp_str, pos, sv.m_len); + // This path is the most probable case, so check it first. + if FK_YAML_LIKELY (len == 4) { + const char* p_begin = &*begin; + return (std::strncmp(p_begin, "null", 4) == 0) || (std::strncmp(p_begin, "Null", 4) == 0) || + (std::strncmp(p_begin, "NULL", 4) == 0); } - /// @brief Finds the last occurence of `c` character in this referenced character sequence. - /// @param c The character to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of `c` character, `npos` otherwise. - size_type find_last_of(CharT c, size_type pos = npos) const noexcept { - return rfind(c, pos); + if (len == 1) { + return *begin == '~'; } - /// @brief Finds the last occurence of `s` character sequence by `n` characters in this referenced character - /// sequence. - /// @param s The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @param n The length of `s` character sequence used for comparison. - /// @return The beginning position of `s` characters, `npos` otherwise. - size_type find_last_of(const CharT* s, size_type pos, size_type n) const noexcept { - if FK_YAML_LIKELY (n <= m_len) { - pos = std::min(m_len - n - 1, pos); + return false; +} - do { - const CharT* p_found = traits_type::find(s, n, mp_str[pos]); - if (p_found) { - return pos; - } - } while (pos-- != 0); - } +///////////////////////////// +// scalar <--> boolean // +///////////////////////////// - return npos; - } +/// @brief Converts a scalar into a boolean value +/// @tparam CharItr The type of char iterators. Its value type must be `char` (maybe cv-qualified). +/// @tparam BoolType The output boolean type. +/// @param begin The iterator to the first element of the scalar. +/// @param end The iterator to the past-the-end element of the scalar. +/// @param boolean The boolean value holder. +/// @return true if the conversion completes successfully, false otherwise. +template +inline bool atob(CharItr begin, CharItr end, BoolType& boolean) noexcept { + static_assert(is_iterator_of::value, "atob() accepts iterators for char type"); - /// @brief Finds the last occurence of `s` character sequence in this referenced character sequence. - /// @param s The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of `s` characters, `npos` otherwise. - size_type find_last_of(const CharT* s, size_type pos = npos) const noexcept { - return find_last_of(basic_str_view(s), pos); + if FK_YAML_UNLIKELY (begin == end) { + return false; } - /// @brief Finds the first absence of `sv` character sequence in this referenced character sequence. - /// @param sv The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of non `sv` characters, `npos` otherwise. - size_type find_first_not_of(basic_str_view sv, size_type pos = 0) const noexcept { - return find_first_not_of(sv.mp_str, pos, sv.m_len); - } + uint32_t len = static_cast(std::distance(begin, end)); + const char* p_begin = &*begin; - /// @brief Finds the first absence of `c` character in this referenced character sequence. - /// @param c The character to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of non `c` character, `npos` otherwise. - size_type find_first_not_of(CharT c, size_type pos = 0) const noexcept { - for (; pos < m_len; ++pos) { - if (!traits_type::eq(mp_str[pos], c)) { - return pos; - } - } + if (len == 4) { + bool is_true_scalar = (std::strncmp(p_begin, "true", 4) == 0) || (std::strncmp(p_begin, "True", 4) == 0) || + (std::strncmp(p_begin, "TRUE", 4) == 0); - return npos; + if FK_YAML_LIKELY (is_true_scalar) { + boolean = static_cast(true); + } + return is_true_scalar; } - /// @brief Finds the first absence of `s` character sequence by `n` characters in this referenced character - /// sequence. - /// @param s The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @param n The length of `s` character sequence used for comparison. - /// @return The beginning position of non `s` characters, `npos` otherwise. - size_type find_first_not_of(const CharT* s, size_type pos, size_type n) const noexcept { - for (; pos < m_len; ++pos) { - const CharT* p_found = traits_type::find(s, n, mp_str[pos]); - if (!p_found) { - return pos; - } - } + if (len == 5) { + bool is_false_scalar = (std::strncmp(p_begin, "false", 5) == 0) || (std::strncmp(p_begin, "False", 5) == 0) || + (std::strncmp(p_begin, "FALSE", 5) == 0); - return npos; + if FK_YAML_LIKELY (is_false_scalar) { + boolean = static_cast(false); + } + return is_false_scalar; } - /// @brief Finds the first absence of `s` character sequence in this referenced character sequence. - /// @param s The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of non `s` characters, `npos` otherwise. - size_type find_first_not_of(const CharT* s, size_type pos = 0) const noexcept { - return find_first_not_of(basic_str_view(s), pos); - } + return false; +} - /// @brief Finds the last absence of `sv` character sequence in this referenced character sequence. - /// @param sv The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of non `sv` characters, `npos` otherwise. - size_type find_last_not_of(basic_str_view sv, size_type pos = npos) const noexcept { - return find_last_not_of(sv.mp_str, pos, sv.m_len); - } +///////////////////////////// +// scalar <--> integer // +///////////////////////////// - /// @brief Finds the last absence of `c` character in this referenced character sequence. - /// @param c The character to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of non `c` character, `npos` otherwise. - size_type find_last_not_of(CharT c, size_type pos = npos) const noexcept { - if FK_YAML_LIKELY (m_len > 0) { - pos = std::min(m_len, pos); +// +// scalar --> decimals +// - do { - if (!traits_type::eq(mp_str[--pos], c)) { - return pos; - } - } while (pos > 0); +/// @brief Converts a scalar into decimals. This is common implementation for both signed/unsigned integer types. +/// @warning +/// This function does NOT care about overflows if IntType is unsigned. The source string value must be validated +/// beforehand by calling either atoi_dec_pos() or atoi_dec_neg() functions. +/// Furthermore, `p_begin` and `p_end` must NOT be null. Validate them before calling this function. +/// @tparam IntType The output integer type. It can be either signed or unsigned. +/// @param p_begin The pointer to the first element of the scalar. +/// @param p_end The pointer to the past-the-end element of the scalar. +/// @param i The output integer value holder. +/// @return true if the conversion completes successfully, false otherwise. +template +inline bool atoi_dec_unchecked(const char* p_begin, const char* p_end, IntType& i) noexcept { + static_assert( + is_non_bool_integral::value, + "atoi_dec_unchecked() accepts non-boolean integral types as an output type"); + + i = 0; + do { + char c = *p_begin; + if FK_YAML_UNLIKELY (c < '0' || '9' < c) { + return false; } + // Overflow is intentional when the IntType is signed. + i = i * IntType(10) + IntType(c - '0'); + } while (++p_begin != p_end); - return npos; - } + return true; +} - /// @brief Finds the last absence of `s` character sequence by `n` characters in this referenced character - /// sequence. - /// @param s The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @param n The length of `s` character sequence used for comparison. - /// @return The beginning position of non `s` characters, `npos` otherwise. - size_type find_last_not_of(const CharT* s, size_type pos, size_type n) const noexcept { - if FK_YAML_UNLIKELY (n <= m_len) { - pos = std::min(m_len - n, pos) + 1; +/// @brief Converts a scalar into positive decimals. This function executes bounds check to avoid overflow. +/// @warning `p_begin` and `p_end` must not be null. Validate them before calling this function. +/// @tparam IntType The output integer type. It can be either signed or unsigned. +/// @param p_begin The pointer to the first element of the scalar. +/// @param p_end The pointer to the past-the-end element of the scalar. +/// @param i The output integer value holder. +/// @return true if the conversion completes successfully, false otherwise. +template +inline bool atoi_dec_pos(const char* p_begin, const char* p_end, IntType& i) noexcept { + static_assert( + is_non_bool_integral::value, "atoi_dec_pos() accepts non-boolean integral types as an output type"); - do { - const CharT* p_found = traits_type::find(s, n, mp_str[--pos]); - if (!p_found) { - return pos; - } - } while (pos > 0); - } + if FK_YAML_UNLIKELY (p_begin == p_end) { + return false; + } - return npos; + using conv_limits_type = conv_limits::value>; + + std::size_t len = static_cast(p_end - p_begin); + if FK_YAML_UNLIKELY (len > conv_limits_type::max_chars_dec) { + // Overflow will happen. + return false; } - /// @brief Finds the last absence of `s` character sequence in this referenced character sequence. - /// @param s The character sequence to compare with. - /// @param pos The offset of the search beginning position in this referenced character sequence. - /// @return The beginning position of non `s` characters, `npos` otherwise. - size_type find_last_not_of(const CharT* s, size_type pos = npos) const noexcept { - return find_last_not_of(basic_str_view(s), pos); + if (len == conv_limits_type::max_chars_dec) { + const char* p_max_value_chars_dec = conv_limits_type::max_value_chars_dec(); + + for (std::size_t idx = 0; idx < conv_limits_type::max_chars_dec; idx++) { + if (p_begin[idx] < p_max_value_chars_dec[idx]) { + // No need to check the lower digits. Overflow will no longer happen. + break; + } + + if FK_YAML_UNLIKELY (p_begin[idx] > p_max_value_chars_dec[idx]) { + // Overflow will happen. + return false; + } + } } -private: - size_type m_len {0}; - const value_type* mp_str {nullptr}; -}; + return atoi_dec_unchecked(p_begin, p_end, i); +} -// Prior to C++17, a static constexpr class member needs an out-of-class definition. -#ifndef FK_YAML_HAS_CXX_17 +/// @brief Converts a scalar into negative decimals. This function executes bounds check to avoid underflow. +/// @warning `p_begin` and `p_end` must not be null. Validate them before calling this function. +/// @tparam IntType The output integer type. It must be signed. +/// @param p_begin The pointer to the first element of the scalar. +/// @param p_end The pointer to the past-the-end element of the scalar. +/// @param i The output integer value holder. +/// @return true if the conversion completes successfully, false otherwise. +template +inline bool atoi_dec_neg(const char* p_begin, const char* p_end, IntType& i) noexcept { + static_assert( + is_non_bool_integral::value, "atoi_dec_neg() accepts non-boolean integral types as an output type"); -template -constexpr typename basic_str_view::size_type basic_str_view::npos; + if FK_YAML_UNLIKELY (p_begin == p_end) { + return false; + } -#endif // !defined(FK_YAML_HAS_CXX_17) + using conv_limits_type = conv_limits::value>; -/// @brief An equal-to operator of the basic_str_view class. -/// @tparam CharT Character type -/// @tparam Traits Character traits type. -/// @param lhs A basic_str_view object for comparison. -/// @param rhs A basic_str_view object to compare with. -/// @return true if the two objects are the same, false otherwise. -template -inline bool operator==(basic_str_view lhs, basic_str_view rhs) noexcept { - // Comparing the lengths first will omit unnecessary value comparison in compare(). - return lhs.size() == rhs.size() && lhs.compare(rhs) == 0; -} + std::size_t len = static_cast(p_end - p_begin); + if FK_YAML_UNLIKELY (len > conv_limits_type::max_chars_dec) { + // Underflow will happen. + return false; + } -/// @brief An equal-to operator of the basic_str_view class. -/// @tparam CharT Character type -/// @tparam Traits Character traits type. -/// @param lhs A basic_str_view object for comparison. -/// @param rhs A basic_string object to compare with. -/// @return true if the two objects are the same, false otherwise. -template -inline bool operator==(basic_str_view lhs, const std::basic_string& rhs) noexcept { - return lhs == basic_str_view(rhs); -} + if (len == conv_limits_type::max_chars_dec) { + const char* p_min_value_chars_dec = conv_limits_type::min_value_chars_dec(); -/// @brief An equal-to operator of the basic_str_view class. -/// @tparam CharT Character type -/// @tparam Traits Character traits type. -/// @param lhs A basic_string object for comparison. -/// @param rhs A basic_str_view object to compare with. -/// @return true if the two objects are the same, false otherwise. -template -inline bool operator==(const std::basic_string& lhs, basic_str_view rhs) noexcept { - return basic_str_view(lhs) == rhs; -} + for (std::size_t idx = 0; idx < conv_limits_type::max_chars_dec; idx++) { + if (p_begin[idx] < p_min_value_chars_dec[idx]) { + // No need to check the lower digits. Underflow will no longer happen. + break; + } -/// @brief An equal-to operator of the basic_str_view class. -/// @tparam CharT Character type -/// @tparam Traits Character traits type. -/// @tparam N The length of the character array. -/// @param lhs A basic_str_view object for comparison. -/// @param rhs A character array to compare with. -/// @return true if the two objects are the same, false otherwise. -template -inline bool operator==(basic_str_view lhs, const CharT (&rhs)[N]) noexcept { - // assume `rhs` is null terminated - return lhs == basic_str_view(rhs, N - 1); -} + if FK_YAML_UNLIKELY (p_begin[idx] > p_min_value_chars_dec[idx]) { + // Underflow will happen. + return false; + } + } + } -/// @brief An equal-to operator of the basic_str_view class. -/// @tparam CharT Character type -/// @tparam Traits Character traits type. -/// @tparam N The length of the character array. -/// @param rhs A character array for comparison. -/// @param lhs A basic_str_view object to compare with. -/// @return true if the two objects are the same, false otherwise. -template -inline bool operator==(const CharT (&lhs)[N], basic_str_view rhs) noexcept { - // assume `lhs` is null terminated - return basic_str_view(lhs, N - 1) == rhs; + return atoi_dec_unchecked(p_begin, p_end, i); } -/// @brief An not-equal-to operator of the basic_str_view class. -/// @tparam CharT Character type -/// @tparam Traits Character traits type. -/// @param lhs A basic_str_view object for comparison. -/// @param rhs A basic_str_view object to compare with. -/// @return true if the two objects are different, false otherwise. -template -inline bool operator!=(basic_str_view lhs, basic_str_view rhs) noexcept { - return !(lhs == rhs); -} +// +// scalar --> octals +// -/// @brief An not-equal-to operator of the basic_str_view class. -/// @tparam CharT Character type -/// @tparam Traits Character traits type. -/// @param lhs A basic_str_view object for comparison. -/// @param rhs A basic_string object to compare with. -/// @return true if the two objects are different, false otherwise. -template -inline bool operator!=(basic_str_view lhs, const std::basic_string& rhs) noexcept { - return !(lhs == basic_str_view(rhs)); -} +/// @brief Converts a scalar into octals. This function executes bounds check to avoid overflow. +/// @warning `p_begin` and `p_end` must not be null. Validate them before calling this function. +/// @tparam IntType The output integer type. It can be either signed or unsigned. +/// @param p_begin The pointer to the first element of the scalar. +/// @param p_end The pointer to the past-the-end element of the scalar. +/// @param i The output integer value holder. +/// @return true if the conversion completes successfully, false otherwise. +template +inline bool atoi_oct(const char* p_begin, const char* p_end, IntType& i) noexcept { + static_assert( + is_non_bool_integral::value, "atoi_oct() accepts non-boolean integral types as an output type"); -/// @brief An not-equal-to operator of the basic_str_view class. -/// @tparam CharT Character type -/// @tparam Traits Character traits type. -/// @param lhs A basic_string object for comparison. -/// @param rhs A basic_str_view object to compare with. -/// @return true if the two objects are different, false otherwise. -template -inline bool operator!=(const std::basic_string& lhs, basic_str_view rhs) noexcept { - return !(basic_str_view(lhs) == rhs); -} + if FK_YAML_UNLIKELY (p_begin == p_end) { + return false; + } -/// @brief An not-equal-to operator of the basic_str_view class. -/// @tparam CharT Character type -/// @tparam Traits Character traits type. -/// @tparam N The length of the character array. -/// @param lhs A basic_str_view object for comparison. -/// @param rhs A character array to compare with. -/// @return true if the two objects are different, false otherwise. -template -inline bool operator!=(basic_str_view lhs, const CharT (&rhs)[N]) noexcept { - // assume `rhs` is null terminated. - return !(lhs == basic_str_view(rhs, N - 1)); -} + using conv_limits_type = conv_limits::value>; -/// @brief An not-equal-to operator of the basic_str_view class. -/// @tparam CharT Character type -/// @tparam Traits Character traits type. -/// @tparam N The length of the character array. -/// @param rhs A character array for comparison. -/// @param lhs A basic_str_view object to compare with. -/// @return true if the two objects are different, false otherwise. -template -inline bool operator!=(const CharT (&lhs)[N], basic_str_view rhs) noexcept { - // assume `lhs` is null terminate - return !(basic_str_view(lhs, N - 1) == rhs); -} + std::size_t len = static_cast(p_end - p_begin); + if FK_YAML_UNLIKELY (!conv_limits_type::check_if_octs_safe(p_begin, len)) { + return false; + } -/// @brief An less-than operator of the basic_str_view class. -/// @tparam CharT Character type -/// @tparam Traits Character traits type. -/// @param lhs A basic_str_view object for comparison. -/// @param rhs A basic_str_view object to compare with. -/// @return true if `lhs` is less than `rhs`, false otherwise. -template -inline bool operator<(basic_str_view lhs, basic_str_view rhs) noexcept { - return lhs.compare(rhs) < 0; -} + i = 0; + do { + char c = *p_begin; + if FK_YAML_UNLIKELY (c < '0' || '7' < c) { + return false; + } + i = i * IntType(8) + IntType(c - '0'); + } while (++p_begin != p_end); -/// @brief An less-than-or-equal-to operator of the basic_str_view class. -/// @tparam CharT Character type -/// @tparam Traits Character traits type. -/// @param lhs A basic_str_view object for comparison. -/// @param rhs A basic_str_view object to compare with. -/// @return true if `lhs` is less than or equal to `rhs`, false otherwise. -template -inline bool operator<=(basic_str_view lhs, basic_str_view rhs) noexcept { - return lhs.compare(rhs) <= 0; + return true; } -/// @brief An greater-than operator of the basic_str_view class. -/// @tparam CharT Character type -/// @tparam Traits Character traits type. -/// @param lhs A basic_str_view object for comparison. -/// @param rhs A basic_str_view object to compare with. -/// @return true if `lhs` is greater than `rhs`, false otherwise. -template -inline bool operator>(basic_str_view lhs, basic_str_view rhs) noexcept { - return lhs.compare(rhs) > 0; -} +// +// scalar --> hexadecimals +// -/// @brief An greater-than-or-equal-to operator of the basic_str_view class. -/// @tparam CharT Character type -/// @tparam Traits Character traits type. -/// @param lhs A basic_str_view object for comparison. -/// @param rhs A basic_str_view object to compare with. -/// @return true if `lhs` is greater than or equal to `rhs`, false otherwise. -template -inline bool operator>=(basic_str_view lhs, basic_str_view rhs) noexcept { - return lhs.compare(rhs) >= 0; -} +/// @brief Converts a scalar into hexadecimals. This function executes bounds check to avoid overflow. +/// @warning `p_begin` and `p_end` must not be null. Validate them before calling this function. +/// @tparam IntType The output integer type. It can be either signed or unsigned. +/// @param p_begin The pointer to the first element of the scalar. +/// @param p_end The pointer to the past-the-end element of the scalar. +/// @param i The output integer value holder. +/// @return true if the conversion completes successfully, false otherwise. +template +inline bool atoi_hex(const char* p_begin, const char* p_end, IntType& i) noexcept { + static_assert( + is_non_bool_integral::value, "atoi_hex() accepts non-boolean integral types as an output type"); -/// @brief Insertion operator of the basic_str_view class. -/// @tparam CharT Character type. -/// @tparam Traits Character traits type. -/// @param os An output stream object. -/// @param sv A basic_str_view object. -/// @return Reference to the output stream object `os`. -template -inline std::basic_ostream& operator<<( - std::basic_ostream& os, basic_str_view sv) { - return os.write(sv.data(), static_cast(sv.size())); -} + if FK_YAML_UNLIKELY (p_begin == p_end) { + return false; + } -/// @brief view into `char` sequence. -using str_view = basic_str_view; + using conv_limits_type = conv_limits::value>; -#if FK_YAML_HAS_CHAR8_T -/// @brief view into `char8_t` sequence. -using u8str_view = basic_str_view; -#endif + std::size_t len = static_cast(p_end - p_begin); + if FK_YAML_UNLIKELY (!conv_limits_type::check_if_hexs_safe(p_begin, len)) { + return false; + } -/// @brief view into `char16_t` sequence. -using u16str_view = basic_str_view; + i = 0; + do { + char c = *p_begin; + IntType ci = 0; + if ('0' <= c && c <= '9') { + ci = IntType(c - '0'); + } + else if ('A' <= c && c <= 'F') { + ci = IntType(c - 'A' + 10); + } + else if ('a' <= c && c <= 'f') { + ci = IntType(c - 'a' + 10); + } + else { + return false; + } + i = i * IntType(16) + ci; + } while (++p_begin != p_end); -/// @brief view into `char32_t` sequence. -using u32str_view = basic_str_view; + return true; +} -FK_YAML_DETAIL_NAMESPACE_END +// +// atoi() & itoa() +// -#endif /* FK_YAML_DETAIL_STR_VIEW_HPP_ */ +/// @brief Converts a scalar into integers. This function executes bounds check to avoid overflow/underflow. +/// @tparam CharItr The type of char iterators. Its value type must be char (maybe cv-qualified). +/// @tparam IntType The output integer type. It can be either signed or unsigned. +/// @param begin The iterator to the first element of the scalar. +/// @param end The iterator to the past-the-end element of the scalar. +/// @param i The output integer value holder. +/// @return true if the conversion completes successfully, false otherwise. +template +inline bool atoi(CharItr begin, CharItr end, IntType& i) noexcept { + static_assert(is_iterator_of::value, "atoi() accepts iterators for char type"); + static_assert(is_non_bool_integral::value, "atoi() accepts non-boolean integral types as an output type"); + if FK_YAML_UNLIKELY (begin == end) { + return false; + } -FK_YAML_DETAIL_NAMESPACE_BEGIN + uint32_t len = static_cast(std::distance(begin, end)); + const char* p_begin = &*begin; + const char* p_end = p_begin + len; -/// @brief A position tracker of the target buffer. -class position_tracker { -public: - void set_target_buffer(str_view buffer) noexcept { - m_begin = m_last = buffer.begin(); - m_end = buffer.end(); + char first = *begin; + if (first == '+') { + return atoi_dec_pos(p_begin + 1, p_end, i); } - /// @brief Update the set of the current position informations. - /// @note This function doesn't support cases where cur_pos has moved backward from the last call. - /// @param cur_pos The iterator to the current element of the buffer. - void update_position(const char* p_current) { - uint32_t diff = static_cast(p_current - m_last); - if (diff == 0) { - return; + if (first == '-') { + if (!std::numeric_limits::is_signed) { + return false; } - m_cur_pos += diff; - uint32_t prev_lines_read = m_lines_read; - m_lines_read += static_cast(std::count(m_last, p_current, '\n')); - m_last = p_current; - - if (prev_lines_read == m_lines_read) { - m_cur_pos_in_line += diff; - return; + bool success = atoi_dec_neg(p_begin + 1, p_end, i); + if (success) { + i *= IntType(-1); } - uint32_t count = 0; - const char* p_begin = m_begin; - while (--p_current != p_begin) { - if (*p_current == '\n') { - break; - } - count++; - } - m_cur_pos_in_line = count; + return success; } - uint32_t get_cur_pos() const noexcept { - return m_cur_pos; + if (first != '0') { + return atoi_dec_pos(p_begin, p_end, i); } - - /// @brief Get the current position in the current line. - /// @return uint32_t The current position in the current line. - uint32_t get_cur_pos_in_line() const noexcept { - return m_cur_pos_in_line; + else if (p_begin + 1 != p_end) { + switch (*(p_begin + 1)) { + case 'o': + return atoi_oct(p_begin + 2, p_end, i); + case 'x': + return atoi_hex(p_begin + 2, p_end, i); + default: + // The YAML spec doesn't allow decimals starting with 0. + return false; + } } - /// @brief Get the number of lines which have already been read. - /// @return uint32_t The number of lines which have already been read. - uint32_t get_lines_read() const noexcept { - return m_lines_read; - } + i = 0; + return true; +} -private: - /// The iterator to the beginning element in the target buffer. - const char* m_begin {}; - /// The iterator to the past-the-end element in the target buffer. - const char* m_end {}; - /// The iterator to the last updated element in the target buffer. - const char* m_last {}; - /// The current position from the beginning of an input buffer. - uint32_t m_cur_pos {0}; - /// The current position in the current line. - uint32_t m_cur_pos_in_line {0}; - /// The number of lines which have already been read. - uint32_t m_lines_read {0}; -}; +/////////////////////////// +// scalar <--> float // +/////////////////////////// -FK_YAML_DETAIL_NAMESPACE_END +/// @brief Set an infinite `float` value based on the given signedness. +/// @param f The output `float` value holder. +/// @param sign Whether the infinite value should be positive or negative. +inline void set_infinity(float& f, const float sign) noexcept { + f = std::numeric_limits::infinity() * sign; +} + +/// @brief Set an infinite `double` value based on the given signedness. +/// @param f The output `double` value holder. +/// @param sign Whether the infinite value should be positive or negative. +inline void set_infinity(double& f, const double sign) noexcept { + f = std::numeric_limits::infinity() * sign; +} -#endif /* FK_YAML_DETAIL_INPUT_POSITION_TRACKER_HPP_ */ +/// @brief Set a NaN `float` value. +/// @param f The output `float` value holder. +inline void set_nan(float& f) noexcept { + f = std::nanf(""); +} -// #include +/// @brief Set a NaN `double` value. +/// @param f The output `double` value holder. +inline void set_nan(double& f) noexcept { + f = std::nan(""); +} -// #include +#if FK_YAML_HAS_TO_CHARS -// #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_TYPES_LEXICAL_TOKEN_T_HPP_ -#define FK_YAML_DETAIL_TYPES_LEXICAL_TOKEN_T_HPP_ +/// @brief Converts a scalar into a floating point value. +/// @warning `p_begin` and `p_end` must not be null. Validate them before calling this function. +/// @param p_begin The pointer to the first element of the scalar. +/// @param p_end The pointer to the past-the-end element of the scalar. +/// @param f The output floating point value holder. +/// @return true if the conversion completes successfully, false otherwise. +template +inline bool atof_impl(const char* p_begin, const char* p_end, FloatType& f) noexcept { + static_assert(std::is_floating_point_v, "atof_impl() accepts floating point types as an output type"); + if (auto [ptr, ec] = std::from_chars(p_begin, p_end, f); ec == std::errc {}) { + return ptr == p_end; + } + return false; +} -// #include +#else +/// @brief Converts a scalar into a `float` value. +/// @warning `p_begin` and `p_end` must not be null. Validate them before calling this function. +/// @param p_begin The pointer to the first element of the scalar. +/// @param p_end The pointer to the past-the-end element of the scalar. +/// @param f The output `float` value holder. +/// @return true if the conversion completes successfully, false otherwise. +inline bool atof_impl(const char* p_begin, const char* p_end, float& f) { + std::size_t idx = 0; + f = std::stof(std::string(p_begin, p_end), &idx); + return idx == static_cast(p_end - p_begin); +} -FK_YAML_DETAIL_NAMESPACE_BEGIN +/// @brief Converts a scalar into a `double` value. +/// @warning `p_begin` and `p_end` must not be null. Validate them before calling this function. +/// @param p_begin The pointer to the first element of the scalar. +/// @param p_end The pointer to the past-the-end element of the scalar. +/// @param f The output `double` value holder. +/// @return true if the conversion completes successfully, false otherwise. +inline bool atof_impl(const char* p_begin, const char* p_end, double& f) { + std::size_t idx = 0; + f = std::stod(std::string(p_begin, p_end), &idx); + return idx == static_cast(p_end - p_begin); +} -/// @brief Definition of lexical token types. -enum class lexical_token_t { - END_OF_BUFFER, //!< the end of input buffer. - EXPLICIT_KEY_PREFIX, //!< the character for explicit mapping key prefix `?`. - KEY_SEPARATOR, //!< the key separater `:` - VALUE_SEPARATOR, //!< the value separater `,` - ANCHOR_PREFIX, //!< the character for anchor prefix `&` - ALIAS_PREFIX, //!< the character for alias prefix `*` - YAML_VER_DIRECTIVE, //!< a YAML version directive found. use get_yaml_version() to get a value. - TAG_DIRECTIVE, //!< a TAG directive found. use GetTagInfo() to get the tag information. - TAG_PREFIX, //!< the character for tag prefix `!` - INVALID_DIRECTIVE, //!< an invalid directive found. do not try to get the value. - SEQUENCE_BLOCK_PREFIX, //!< the character for sequence block prefix `- ` - SEQUENCE_FLOW_BEGIN, //!< the character for sequence flow begin `[` - SEQUENCE_FLOW_END, //!< the character for sequence flow end `]` - MAPPING_FLOW_BEGIN, //!< the character for mapping begin `{` - MAPPING_FLOW_END, //!< the character for mapping end `}` - PLAIN_SCALAR, //!< plain (unquoted) scalars - SINGLE_QUOTED_SCALAR, //!< single-quoted scalars - DOUBLE_QUOTED_SCALAR, //!< double-quoted scalars - BLOCK_SCALAR, //!< block style scalars - END_OF_DIRECTIVES, //!< the end of declaration of directives specified by `---`. - END_OF_DOCUMENT, //!< the end of a YAML document specified by `...`. -}; +#endif // FK_YAML_HAS_TO_CHARS -FK_YAML_DETAIL_NAMESPACE_END +/// @brief Converts a scalar into a floating point value. +/// @tparam CharItr The type of char iterators. Its value type must be char (maybe cv-qualified). +/// @tparam FloatType The output floating point value type. +/// @param begin The iterator to the first element of the scalar. +/// @param end The iterator to the past-the-end element of the scalar. +/// @param f The output floating point value holder. +/// @return true if the conversion completes successfully, false otherwise. +template +inline bool atof(CharItr begin, CharItr end, FloatType& f) noexcept(noexcept(atof_impl(&*begin, &*begin, f))) { + static_assert(is_iterator_of::value, "atof() accepts iterators for char type"); + static_assert(std::is_floating_point::value, "atof() accepts floating point types as an output type"); -#endif /* FK_YAML_DETAIL_TYPES_LEXICAL_TOKEN_T_HPP_ */ + if FK_YAML_UNLIKELY (begin == end) { + return false; + } -// #include + uint32_t len = static_cast(std::distance(begin, end)); + const char* p_begin = &*begin; + const char* p_end = p_begin + len; + + if (*p_begin == '-' || *p_begin == '+') { + if (len == 5) { + const char* p_from_second = p_begin + 1; + bool is_inf_scalar = (std::strncmp(p_from_second, ".inf", 4) == 0) || + (std::strncmp(p_from_second, ".Inf", 4) == 0) || + (std::strncmp(p_from_second, ".INF", 4) == 0); + if (is_inf_scalar) { + set_infinity(f, *p_begin == '-' ? FloatType(-1.) : FloatType(1.)); + return true; + } + } -FK_YAML_DETAIL_NAMESPACE_BEGIN + if (*p_begin == '+') { + // Skip the positive sign since it's sometimes not recognized as part of float value. + ++p_begin; + } + } + else if (len == 4) { + bool is_inf_scalar = (std::strncmp(p_begin, ".inf", 4) == 0) || (std::strncmp(p_begin, ".Inf", 4) == 0) || + (std::strncmp(p_begin, ".INF", 4) == 0); + bool is_nan_scalar = false; + if (!is_inf_scalar) { + is_nan_scalar = (std::strncmp(p_begin, ".nan", 4) == 0) || (std::strncmp(p_begin, ".NaN", 4) == 0) || + (std::strncmp(p_begin, ".NAN", 4) == 0); + } + + if (is_inf_scalar) { + set_infinity(f, FloatType(1.)); + return true; + } + + if (is_nan_scalar) { + set_nan(f); + return true; + } + } -struct lexical_token { - lexical_token_t type {lexical_token_t::END_OF_BUFFER}; - str_view str {}; -}; +#if FK_YAML_HAS_TO_CHARS + return atof_impl(p_begin, p_end, f); +#else + bool success = false; + try { + success = atof_impl(p_begin, p_end, f); + } + catch (const std::exception& /*unused*/) { + success = false; + } -/// @brief A class which lexically analizes YAML formatted inputs. -class lexical_analyzer { -private: - enum class block_style_indicator_t { - LITERAL, //!< keeps newlines inside the block as they are indicated by a pipe `|`. - FOLDED, //!< replaces newlines inside the block with spaces indicated by a right angle bracket `>`. - }; + return success; +#endif +} - enum class chomping_indicator_t { - STRIP, //!< excludes final line breaks and traiing empty lines indicated by `-`. - KEEP, //!< preserves final line breaks but excludes trailing empty lines. no indicator means this type. - CLIP, //!< preserves final line breaks and trailing empty lines indicated by `+`. - }; +FK_YAML_DETAIL_NAMESPACE_END -public: - /// @brief Construct a new lexical_analyzer object. - /// @tparam InputAdapterType The type of the input adapter. - /// @param input_adapter An input adapter object. - explicit lexical_analyzer(str_view input_buffer) noexcept - : m_input_buffer(input_buffer), - m_cur_itr(m_input_buffer.begin()), - m_end_itr(m_input_buffer.end()) { - m_pos_tracker.set_target_buffer(m_input_buffer); - } +#endif /* FK_YAML_CONVERSIONS_SCALAR_CONV_HPP */ - /// @brief Get the next lexical token by scanning the left of the input buffer. - /// @return lexical_token The next lexical token. - lexical_token get_next_token() { - skip_white_spaces_and_newline_codes(); +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT - m_token_begin_itr = m_cur_itr; - m_pos_tracker.update_position(m_cur_itr); - m_last_token_begin_pos = m_pos_tracker.get_cur_pos_in_line(); - m_last_token_begin_line = m_pos_tracker.get_lines_read(); +#ifndef FK_YAML_DETAIL_ENCODINGS_YAML_ESCAPER_HPP +#define FK_YAML_DETAIL_ENCODINGS_YAML_ESCAPER_HPP - if (m_cur_itr == m_end_itr) { - return {}; - } +#include - lexical_token token {}; - token.type = lexical_token_t::PLAIN_SCALAR; +// #include - switch (*m_cur_itr) { - case '?': - if (++m_cur_itr == m_end_itr) { - token.str = str_view {m_token_begin_itr, m_end_itr}; - return token; - } +// #include - switch (*m_cur_itr) { - case ' ': - token.type = lexical_token_t::EXPLICIT_KEY_PREFIX; - return token; - default: - scan_scalar(token); - return token; - } - case ':': { // key separater - if (++m_cur_itr == m_end_itr) { - token.type = lexical_token_t::KEY_SEPARATOR; - return token; - } +// #include - switch (*m_cur_itr) { - case ' ': - case '\t': - case '\n': - break; - case ',': - case '[': - case ']': - case '{': - case '}': - if (m_flow_context_depth > 0) { - // the above characters are not "safe" to be followed in a flow context. - // See https://yaml.org/spec/1.2.2/#733-plain-style for more details. - break; - } - scan_scalar(token); - return token; - default: - scan_scalar(token); - return token; - } +// #include - token.type = lexical_token_t::KEY_SEPARATOR; - return token; - } - case ',': // value separater - ++m_cur_itr; - token.type = lexical_token_t::VALUE_SEPARATOR; - return token; - case '&': { // anchor prefix - extract_anchor_name(token); - bool is_empty = token.str.empty(); - if FK_YAML_UNLIKELY (is_empty) { - emit_error("anchor name must not be empty."); - } - token.type = lexical_token_t::ANCHOR_PREFIX; - return token; - } - case '*': { // alias prefix - extract_anchor_name(token); - bool is_empty = token.str.empty(); - if FK_YAML_UNLIKELY (is_empty) { - emit_error("anchor name must not be empty."); - } +FK_YAML_DETAIL_NAMESPACE_BEGIN - token.type = lexical_token_t::ALIAS_PREFIX; - return token; - } - case '!': - extract_tag_name(token); - token.type = lexical_token_t::TAG_PREFIX; - return token; - case '#': // comment prefix - scan_comment(); - return get_next_token(); - case '%': // directive prefix - token.type = scan_directive(); - return token; - case '-': { - char next = *(m_cur_itr + 1); - switch (next) { - case ' ': - case '\t': - case '\n': - // Move a cursor to the beginning of the next token. - m_cur_itr += 2; - token.type = lexical_token_t::SEQUENCE_BLOCK_PREFIX; - return token; - default: - break; - } +class yaml_escaper { + using iterator = ::std::string::const_iterator; - bool is_available = ((m_end_itr - m_cur_itr) > 2); - if (is_available) { - bool is_dir_end = std::equal(m_token_begin_itr, m_cur_itr + 3, "---"); - if (is_dir_end) { - m_cur_itr += 3; - token.type = lexical_token_t::END_OF_DIRECTIVES; - return token; - } - } +public: + static bool unescape(const char*& begin, const char* end, std::string& buff) { + FK_YAML_ASSERT(*begin == '\\' && std::distance(begin, end) > 0); + bool ret = true; - scan_scalar(token); - return token; - } - case '[': // sequence flow begin - m_flow_context_depth++; - ++m_cur_itr; - token.type = lexical_token_t::SEQUENCE_FLOW_BEGIN; - return token; - case ']': // sequence flow end - m_flow_context_depth = (m_flow_context_depth > 0) ? m_flow_context_depth - 1 : 0; - ++m_cur_itr; - token.type = lexical_token_t::SEQUENCE_FLOW_END; - return token; - case '{': // mapping flow begin - m_flow_context_depth++; - ++m_cur_itr; - token.type = lexical_token_t::MAPPING_FLOW_BEGIN; - return token; - case '}': // mapping flow end - m_flow_context_depth = (m_flow_context_depth > 0) ? m_flow_context_depth - 1 : 0; - ++m_cur_itr; - token.type = lexical_token_t::MAPPING_FLOW_END; - return token; - case '@': - emit_error("Any token cannot start with at(@). It is a reserved indicator for YAML."); - case '`': - emit_error("Any token cannot start with grave accent(`). It is a reserved indicator for YAML."); + switch (*++begin) { + case 'a': + buff.push_back('\a'); + break; + case 'b': + buff.push_back('\b'); + break; + case 't': + case char(0x09): + buff.push_back('\t'); + break; + case 'n': + buff.push_back('\n'); + break; + case 'v': + buff.push_back('\v'); + break; + case 'f': + buff.push_back('\f'); + break; + case 'r': + buff.push_back('\r'); + break; + case 'e': + buff.push_back(char(0x1B)); + break; + case ' ': + buff.push_back(' '); + break; case '\"': - case '\'': - scan_scalar(token); - return token; - case '+': - scan_scalar(token); - return token; - case '.': { - bool is_available = ((m_end_itr - m_cur_itr) > 2); - if (is_available) { - bool is_doc_end = std::equal(m_cur_itr, m_cur_itr + 3, "..."); - if (is_doc_end) { - m_cur_itr += 3; - token.type = lexical_token_t::END_OF_DOCUMENT; - return token; - } + buff.push_back('\"'); + break; + case '/': + buff.push_back('/'); + break; + case '\\': + buff.push_back('\\'); + break; + case 'N': // next line + unescape_escaped_unicode(0x85u, buff); + break; + case '_': // non-breaking space + unescape_escaped_unicode(0xA0u, buff); + break; + case 'L': // line separator + unescape_escaped_unicode(0x2028u, buff); + break; + case 'P': // paragraph separator + unescape_escaped_unicode(0x2029u, buff); + break; + case 'x': { + char32_t codepoint {0}; + ret = extract_codepoint(begin, end, 1, codepoint); + if FK_YAML_LIKELY (ret) { + unescape_escaped_unicode(codepoint, buff); } - - scan_scalar(token); - return token; - } - case '|': { - chomping_indicator_t chomp_type = chomping_indicator_t::KEEP; - uint32_t indent = 0; - ++m_cur_itr; - get_block_style_metadata(chomp_type, indent); - scan_block_style_string_token(block_style_indicator_t::LITERAL, chomp_type, indent); - token.type = lexical_token_t::BLOCK_SCALAR; - token.str = m_value_buffer; - return token; + break; } - case '>': { - chomping_indicator_t chomp_type = chomping_indicator_t::KEEP; - uint32_t indent = 0; - ++m_cur_itr; - get_block_style_metadata(chomp_type, indent); - scan_block_style_string_token(block_style_indicator_t::FOLDED, chomp_type, indent); - token.type = lexical_token_t::BLOCK_SCALAR; - token.str = m_value_buffer; - return token; + case 'u': { + char32_t codepoint {0}; + ret = extract_codepoint(begin, end, 2, codepoint); + if FK_YAML_LIKELY (ret) { + unescape_escaped_unicode(codepoint, buff); + } + break; + } + case 'U': { + char32_t codepoint {0}; + ret = extract_codepoint(begin, end, 4, codepoint); + if FK_YAML_LIKELY (ret) { + unescape_escaped_unicode(codepoint, buff); + } + break; } default: - scan_scalar(token); - return token; + // Unsupported escape sequence is found in a string token. + ret = false; + break; } - } - - /// @brief Get the beginning position of a last token. - /// @return uint32_t The beginning position of a last token. - uint32_t get_last_token_begin_pos() const noexcept { - return m_last_token_begin_pos; - } - - /// @brief Get the number of lines already processed. - /// @return uint32_t The number of lines already processed. - uint32_t get_lines_processed() const noexcept { - return m_last_token_begin_line; - } - - /// @brief Get the YAML version specification. - /// @return str_view A YAML version specification. - str_view get_yaml_version() const noexcept { - return m_yaml_version; - } - - /// @brief Get the YAML tag handle defined in the TAG directive. - /// @return str_view A tag handle. - str_view get_tag_handle() const noexcept { - return m_tag_handle; - } - - /// @brief Get the YAML tag prefix defined in the TAG directive. - /// @return str_view A tag prefix. - str_view get_tag_prefix() const noexcept { - return m_tag_prefix; - } -private: - /// @brief Skip until a newline code or a null character is found. - void scan_comment() { - FK_YAML_ASSERT(*m_cur_itr == '#'); - skip_until_line_end(); + return ret; } - /// @brief Scan directives starting with the prefix '%' - /// @note Currently, only %YAML directive is supported. If not, returns invalid or throws an exception. - /// @return lexical_token_t The lexical token type for directives. - lexical_token_t scan_directive() { - FK_YAML_ASSERT(*m_cur_itr == '%'); - - m_value_buffer.clear(); - m_token_begin_itr = ++m_cur_itr; - - bool ends_loop = false; - while (!ends_loop && m_cur_itr != m_end_itr) { - switch (*m_cur_itr) { - case ' ': + static ::std::string escape(const char* begin, const char* end, bool& is_escaped) { + ::std::string escaped {}; + escaped.reserve(std::distance(begin, end)); + for (; begin != end; ++begin) { + switch (*begin) { + case 0x01: + escaped += "\\u0001"; + is_escaped = true; + break; + case 0x02: + escaped += "\\u0002"; + is_escaped = true; + break; + case 0x03: + escaped += "\\u0003"; + is_escaped = true; + break; + case 0x04: + escaped += "\\u0004"; + is_escaped = true; + break; + case 0x05: + escaped += "\\u0005"; + is_escaped = true; + break; + case 0x06: + escaped += "\\u0006"; + is_escaped = true; + break; + case '\a': + escaped += "\\a"; + is_escaped = true; + break; + case '\b': + escaped += "\\b"; + is_escaped = true; + break; case '\t': - ends_loop = true; + escaped += "\\t"; + is_escaped = true; break; case '\n': - skip_until_line_end(); - return lexical_token_t::INVALID_DIRECTIVE; + escaped += "\\n"; + is_escaped = true; + break; + case '\v': + escaped += "\\v"; + is_escaped = true; + break; + case '\f': + escaped += "\\f"; + is_escaped = true; + break; + case '\r': + escaped += "\\r"; + is_escaped = true; + break; + case 0x0E: + escaped += "\\u000E"; + is_escaped = true; + break; + case 0x0F: + escaped += "\\u000F"; + is_escaped = true; + break; + case 0x10: + escaped += "\\u0010"; + is_escaped = true; + break; + case 0x11: + escaped += "\\u0011"; + is_escaped = true; + break; + case 0x12: + escaped += "\\u0012"; + is_escaped = true; + break; + case 0x13: + escaped += "\\u0013"; + is_escaped = true; + break; + case 0x14: + escaped += "\\u0014"; + is_escaped = true; + break; + case 0x15: + escaped += "\\u0015"; + is_escaped = true; + break; + case 0x16: + escaped += "\\u0016"; + is_escaped = true; + break; + case 0x17: + escaped += "\\u0017"; + is_escaped = true; + break; + case 0x18: + escaped += "\\u0018"; + is_escaped = true; + break; + case 0x19: + escaped += "\\u0019"; + is_escaped = true; + break; + case 0x1A: + escaped += "\\u001A"; + is_escaped = true; + break; + case 0x1B: + escaped += "\\e"; + is_escaped = true; + break; + case 0x1C: + escaped += "\\u001C"; + is_escaped = true; + break; + case 0x1D: + escaped += "\\u001D"; + is_escaped = true; + break; + case 0x1E: + escaped += "\\u001E"; + is_escaped = true; + break; + case 0x1F: + escaped += "\\u001F"; + is_escaped = true; + break; + case '\"': + escaped += "\\\""; + is_escaped = true; + break; + case '\\': + escaped += "\\\\"; + is_escaped = true; + break; default: - ++m_cur_itr; + int diff = static_cast(std::distance(begin, end)); + if (diff > 1) { + if (*begin == char(0xC2u) && *(begin + 1) == char(0x85u)) { + escaped += "\\N"; + std::advance(begin, 1); + is_escaped = true; + break; + } + else if (*begin == char(0xC2u) && *(begin + 1) == char(0xA0u)) { + escaped += "\\_"; + std::advance(begin, 1); + is_escaped = true; + break; + } + + if (diff > 2) { + if (*begin == char(0xE2u) && *(begin + 1) == char(0x80u) && *(begin + 2) == char(0xA8u)) { + escaped += "\\L"; + std::advance(begin, 2); + is_escaped = true; + break; + } + if (*begin == char(0xE2u) && *(begin + 1) == char(0x80u) && *(begin + 2) == char(0xA9u)) { + escaped += "\\P"; + std::advance(begin, 2); + is_escaped = true; + break; + } + } + } + escaped += *begin; break; } } + return escaped; + } // LCOV_EXCL_LINE + +private: + static bool convert_hexchar_to_byte(char source, uint8_t& byte) { + if ('0' <= source && source <= '9') { + // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions) + byte = static_cast(source - char('0')); + return true; + } + + if ('A' <= source && source <= 'F') { + // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions) + byte = static_cast(source - 'A' + 10); + return true; + } + + if ('a' <= source && source <= 'f') { + // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions) + byte = static_cast(source - 'a' + 10); + return true; + } + + // The given character is not hexadecimal. + return false; + } + + static bool extract_codepoint(const char*& begin, const char* end, int bytes_to_read, char32_t& codepoint) { + bool has_enough_room = static_cast(std::distance(begin, end)) >= (bytes_to_read - 1); + if (!has_enough_room) { + return false; + } - str_view dir_name(m_token_begin_itr, m_cur_itr); + int read_size = bytes_to_read * 2; + uint8_t byte {0}; + codepoint = 0; - if (dir_name == "TAG") { - if FK_YAML_UNLIKELY (!ends_loop) { - emit_error("There must be at least one white space between \"%TAG\" and tag info."); + for (int i = read_size - 1; i >= 0; i--) { + bool is_valid = convert_hexchar_to_byte(*++begin, byte); + if (!is_valid) { + return false; } - skip_white_spaces(); - return scan_tag_directive(); + // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions) + codepoint |= static_cast(byte << (4 * i)); } - if (dir_name == "YAML") { - if FK_YAML_UNLIKELY (!ends_loop) { - emit_error("There must be at least one white space between \"%YAML\" and version."); - } - skip_white_spaces(); - return scan_yaml_version_directive(); - } + return true; + } - skip_until_line_end(); - return lexical_token_t::INVALID_DIRECTIVE; + static void unescape_escaped_unicode(char32_t codepoint, std::string& buff) { + std::array encode_buff {}; + uint32_t encoded_size {0}; + utf8::from_utf32(codepoint, encode_buff, encoded_size); + buff.append(reinterpret_cast(encode_buff.data()), encoded_size); } +}; - /// @brief Scan a YAML tag directive. - /// @return lexical_token_t The lexical token type for YAML tag directives. - lexical_token_t scan_tag_directive() { - m_token_begin_itr = m_cur_itr; +FK_YAML_DETAIL_NAMESPACE_END - // - // extract a tag handle - // +#endif /* FK_YAML_DETAIL_ENCODINGS_YAML_ESCAPER_HPP */ - if FK_YAML_UNLIKELY (*m_cur_itr != '!') { - emit_error("Tag handle must start with \'!\'."); - } +// #include - if FK_YAML_UNLIKELY (++m_cur_itr == m_end_itr) { - emit_error("invalid TAG directive is found."); - } +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT - switch (*m_cur_itr) { - case ' ': - case '\t': - // primary handle (!) - break; - case '!': - if FK_YAML_UNLIKELY (++m_cur_itr == m_end_itr) { - emit_error("invalid TAG directive is found."); - } - if FK_YAML_UNLIKELY (*m_cur_itr != ' ' && *m_cur_itr != '\t') { - emit_error("invalid tag handle is found."); - } - break; - default: { - bool ends_loop = false; - do { - switch (*m_cur_itr) { - case ' ': - case '\t': - emit_error("invalid tag handle is found."); - case '!': { - if (m_cur_itr + 1 == m_end_itr) { - ends_loop = true; - break; - } - char next = *(m_cur_itr + 1); - if FK_YAML_UNLIKELY (next != ' ' && next != '\t') { - emit_error("invalid tag handle is found."); - } - ends_loop = true; - break; - } - case '-': - break; - default: - if FK_YAML_UNLIKELY (!isalnum(*m_cur_itr)) { - // See https://yaml.org/spec/1.2.2/#rule-c-named-tag-handle for more details. - emit_error("named handle can contain only numbers(0-9), alphabets(A-Z,a-z) and hyphens(-)."); - } - break; - } +#ifndef FK_YAML_DETAIL_INPUT_SCALAR_SCANNER_HPP +#define FK_YAML_DETAIL_INPUT_SCALAR_SCANNER_HPP - if FK_YAML_UNLIKELY (++m_cur_itr == m_end_itr) { - emit_error("invalid TAG directive is found."); - } - } while (!ends_loop); - break; - } - } +#include +#include - m_tag_handle = str_view {m_token_begin_itr, m_cur_itr}; +// #include - skip_white_spaces(); +// #include - // - // extract a tag prefix. - // +// #include - m_token_begin_itr = m_cur_itr; - const char* p_tag_prefix_begin = m_cur_itr; - switch (*m_cur_itr) { - // a tag prefix must not start with flow indicators to avoid ambiguity. - // See https://yaml.org/spec/1.2.2/#rule-ns-global-tag-prefix for more details. - case ',': - case '[': - case ']': - case '{': - case '}': - emit_error("tag prefix must not start with flow indicators (\',\', [], {})."); - } - // extract the rest of a tag prefix. - bool ends_loop = false; - do { - switch (*m_cur_itr) { - case ' ': - case '\t': - case '\n': - ends_loop = true; - break; - } - } while (!ends_loop && ++m_cur_itr != m_end_itr); +FK_YAML_DETAIL_NAMESPACE_BEGIN - bool is_valid = uri_encoding::validate(p_tag_prefix_begin, m_cur_itr); - if FK_YAML_UNLIKELY (!is_valid) { - emit_error("invalid URI character is found in a tag prefix."); - } +namespace { - m_tag_prefix = str_view {p_tag_prefix_begin, m_cur_itr}; +/// @brief Check if the given character is a digit. +/// @note This function is needed to avoid assertion failures in `std::isdigit()` especially when compiled with MSVC. +/// @param c A character to be checked. +/// @return true if the given character is a digit, false otherwise. +inline bool is_digit(char c) { + return ('0' <= c && c <= '9'); +} - return lexical_token_t::TAG_DIRECTIVE; - } +/// @brief Check if the given character is a hex-digit. +/// @note This function is needed to avoid assertion failures in `std::isxdigit()` especially when compiled with MSVC. +/// @param c A character to be checked. +/// @return true if the given character is a hex-digit, false otherwise. +inline bool is_xdigit(char c) { + return (('0' <= c && c <= '9') || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f')); +} - /// @brief Scan a YAML version directive. - /// @note Only 1.1 and 1.2 are supported. If not, throws an exception. - /// @return lexical_token_t The lexical token type for YAML version directives. - lexical_token_t scan_yaml_version_directive() { - m_token_begin_itr = m_cur_itr; +} // namespace - bool ends_loop = false; - while (!ends_loop && m_cur_itr != m_end_itr) { - switch (*m_cur_itr) { - case ' ': - case '\t': - case '\n': - ends_loop = true; - break; - default: - ++m_cur_itr; - break; - } +/// @brief The class which detects a scalar value type by scanning contents. +class scalar_scanner { +public: + /// @brief Detects a scalar value type by scanning the contents ranged by the given iterators. + /// @param begin The iterator to the first element of the scalar. + /// @param end The iterator to the past-the-end element of the scalar. + /// @return A detected scalar value type. + static node_type scan(const char* begin, const char* end) noexcept { + if (begin == end) { + return node_type::STRING; } - m_yaml_version = str_view {m_token_begin_itr, m_cur_itr}; - - if FK_YAML_UNLIKELY (m_yaml_version.compare("1.1") != 0 && m_yaml_version.compare("1.2") != 0) { - emit_error("Only 1.1 and 1.2 can be specified as the YAML version."); + uint32_t len = static_cast(std::distance(begin, end)); + if (len > 5) { + return scan_possible_number_token(begin, len); } - return lexical_token_t::YAML_VER_DIRECTIVE; - } - - /// @brief Extracts an anchor name from the input. - /// @param token The token into which the extraction result is written. - void extract_anchor_name(lexical_token& token) { - FK_YAML_ASSERT(*m_cur_itr == '&' || *m_cur_itr == '*'); - - m_token_begin_itr = ++m_cur_itr; + const char* p_begin = &*begin; - bool ends_loop = false; - for (; m_cur_itr != m_end_itr; ++m_cur_itr) { - switch (*m_cur_itr) { - // anchor name must not contain white spaces, newline codes and flow indicators. - // See https://yaml.org/spec/1.2.2/#692-node-anchors for more details. - case ' ': - case '\t': - case '\n': - case '{': - case '}': - case '[': - case ']': - case ',': - ends_loop = true; - break; - default: + switch (len) { + case 1: + if (*p_begin == '~') { + return node_type::NULL_OBJECT; + } + break; + case 4: + switch (*p_begin) { + case 'n': + // no possible case of begin a number otherwise. + return (std::strncmp(p_begin + 1, "ull", 3) == 0) ? node_type::NULL_OBJECT : node_type::STRING; + case 'N': + // no possible case of begin a number otherwise. + return ((std::strncmp(p_begin + 1, "ull", 3) == 0) || (std::strncmp(p_begin + 1, "ULL", 3) == 0)) + ? node_type::NULL_OBJECT + : node_type::STRING; + case 't': + // no possible case of being a number otherwise. + return (std::strncmp(p_begin + 1, "rue", 3) == 0) ? node_type::BOOLEAN : node_type::STRING; + case 'T': + // no possible case of being a number otherwise. + return ((std::strncmp(p_begin + 1, "rue", 3) == 0) || (std::strncmp(p_begin + 1, "RUE", 3) == 0)) + ? node_type::BOOLEAN + : node_type::STRING; + case '.': { + const char* p_from_second = p_begin + 1; + bool is_inf_or_nan_scalar = + (std::strncmp(p_from_second, "inf", 3) == 0) || (std::strncmp(p_from_second, "Inf", 3) == 0) || + (std::strncmp(p_from_second, "INF", 3) == 0) || (std::strncmp(p_from_second, "nan", 3) == 0) || + (std::strncmp(p_from_second, "NaN", 3) == 0) || (std::strncmp(p_from_second, "NAN", 3) == 0); + if (is_inf_or_nan_scalar) { + return node_type::FLOAT; + } + // maybe a number. break; } - - if (ends_loop) { + } + break; + case 5: + switch (*p_begin) { + case 'f': + // no possible case of being a number otherwise. + return (std::strncmp(p_begin + 1, "alse", 4) == 0) ? node_type::BOOLEAN : node_type::STRING; + case 'F': + // no possible case of being a number otherwise. + return ((std::strncmp(p_begin + 1, "alse", 4) == 0) || (std::strncmp(p_begin + 1, "ALSE", 4) == 0)) + ? node_type::BOOLEAN + : node_type::STRING; + case '+': + case '-': + if (*(p_begin + 1) == '.') { + const char* p_from_third = p_begin + 2; + bool is_min_inf_scalar = (std::strncmp(p_from_third, "inf", 3) == 0) || + (std::strncmp(p_from_third, "Inf", 3) == 0) || + (std::strncmp(p_from_third, "INF", 3) == 0); + if (is_min_inf_scalar) { + return node_type::FLOAT; + } + } + // maybe a number. break; } + break; } - token.str = str_view {m_token_begin_itr, m_cur_itr}; + return scan_possible_number_token(begin, len); } - /// @brief Extracts a tag name from the input. - /// @param token The token into which the extraction result is written. - void extract_tag_name(lexical_token& token) { - FK_YAML_ASSERT(*m_cur_itr == '!'); - - if (++m_cur_itr == m_end_itr) { - // Just "!" is a non-specific tag. - token.str = str_view {m_token_begin_itr, m_end_itr}; - return; - } - - bool is_verbatim = false; - bool allows_another_tag_prefix = false; +private: + /// @brief Detects a scalar value type from the contents (possibly an integer or a floating-point value). + /// @param itr The iterator to the first element of the scalar. + /// @param len The length of the scalar contents. + /// @return A detected scalar value type. + static node_type scan_possible_number_token(const char* itr, uint32_t len) noexcept { + FK_YAML_ASSERT(len > 0); - switch (*m_cur_itr) { - case ' ': - case '\n': - // Just "!" is a non-specific tag. - token.str = str_view {m_token_begin_itr, m_cur_itr}; - return; - case '!': - // Secondary tag handles (!!suffix) - break; - case '<': - // Verbatim tags (!) - is_verbatim = true; - ++m_cur_itr; - break; + switch (*itr) { + case '-': + return (len > 1) ? scan_negative_number(++itr, --len) : node_type::STRING; + case '+': + return (len > 1) ? scan_decimal_number(++itr, --len, false) : node_type::STRING; + case '0': + return (len > 1) ? scan_after_zero_at_first(++itr, --len) : node_type::INTEGER; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + return (len > 1) ? scan_decimal_number(++itr, --len, false) : node_type::INTEGER; default: - // Either local tags (!suffix) or named handles (!tag!suffix) - allows_another_tag_prefix = true; - break; + return node_type::STRING; } + } - bool is_named_handle = false; - bool ends_loop = false; - do { - if (++m_cur_itr == m_end_itr) { - break; - } + /// @brief Detects a scalar value type by scanning the contents right after the negative sign. + /// @param itr The iterator to the past-the-negative-sign element of the scalar. + /// @param len The length of the scalar contents left unscanned. + /// @return A detected scalar value type. + static node_type scan_negative_number(const char* itr, uint32_t len) noexcept { + FK_YAML_ASSERT(len > 0); - switch (*m_cur_itr) { - // Tag names must not contain spaces or newline codes. - case ' ': - case '\t': - case '\n': - ends_loop = true; - break; - case '!': - if FK_YAML_UNLIKELY (!allows_another_tag_prefix) { - emit_error("invalid tag prefix (!) is found."); - } + if (is_digit(*itr)) { + return (len > 1) ? scan_decimal_number(++itr, --len, false) : node_type::INTEGER; + } - is_named_handle = true; - // tag prefix must not appear three times. - allows_another_tag_prefix = false; - break; - default: - break; - } - } while (!ends_loop); + return node_type::STRING; + } - token.str = str_view {m_token_begin_itr, m_cur_itr}; + /// @brief Detects a scalar value type by scanning the contents right after the beginning 0. + /// @param itr The iterator to the past-the-zero element of the scalar. + /// @param len The length of the scalar left unscanned. + /// @return A detected scalar value type. + static node_type scan_after_zero_at_first(const char* itr, uint32_t len) noexcept { + FK_YAML_ASSERT(len > 0); - if (is_verbatim) { - char last = token.str.back(); - if FK_YAML_UNLIKELY (last != '>') { - emit_error("verbatim tag (!) must be ended with \'>\'."); - } + if (is_digit(*itr)) { + // a token consisting of the beginning '0' and some following numbers, e.g., `0123`, is not an integer + // according to https://yaml.org/spec/1.2.2/#10213-integer. + return node_type::STRING; + } - // only the `TAG` part of the `!` for URI validation. - str_view tag_body = token.str.substr(2, token.str.size() - 3); - if FK_YAML_UNLIKELY (tag_body.empty()) { - emit_error("verbatim tag(!) must not be empty."); + switch (*itr) { + case '.': { + if (len == 1) { + // 0 is omitted after `0.`. + return node_type::FLOAT; } + node_type ret = scan_after_decimal_point(++itr, --len, true); + return (ret == node_type::STRING) ? node_type::STRING : node_type::FLOAT; + } + case 'o': + return (len > 1) ? scan_octal_number(++itr, --len) : node_type::STRING; + case 'x': + return (len > 1) ? scan_hexadecimal_number(++itr, --len) : node_type::STRING; + default: + return node_type::STRING; + } + } - bool is_valid_uri = uri_encoding::validate(tag_body.begin(), tag_body.end()); - if FK_YAML_UNLIKELY (!is_valid_uri) { - emit_error("invalid URI character is found in a verbatim tag."); - } + /// @brief Detects a scalar value type by scanning the contents part starting with a decimal. + /// @param itr The iterator to the beginning decimal element of the scalar. + /// @param len The length of the scalar left unscanned. + /// @param has_decimal_point Whether a decimal point has already been found in the previous part. + /// @return A detected scalar value type. + static node_type scan_decimal_number(const char* itr, uint32_t len, bool has_decimal_point) noexcept { + FK_YAML_ASSERT(len > 0); - return; + if (is_digit(*itr)) { + return (len > 1) ? scan_decimal_number(++itr, --len, has_decimal_point) : node_type::INTEGER; } - if (is_named_handle) { - char last = token.str.back(); - if FK_YAML_UNLIKELY (last == '!') { - // Tag shorthand must be followed by a non-empty suffix. - // See the "Tag Shorthands" section in https://yaml.org/spec/1.2.2/#691-node-tags. - emit_error("named handle has no suffix."); + switch (*itr) { + case '.': { + if (has_decimal_point) { + // the token has more than one period, e.g., a semantic version `1.2.3`. + return node_type::STRING; } - - // get the position of the beginning of a suffix. (!handle!suffix) - std::size_t last_tag_prefix_pos = token.str.find_last_of('!'); - FK_YAML_ASSERT(last_tag_prefix_pos != str_view::npos); - - str_view tag_uri = token.str.substr(last_tag_prefix_pos + 1); - bool is_valid_uri = uri_encoding::validate(tag_uri.begin(), tag_uri.end()); - if FK_YAML_UNLIKELY (!is_valid_uri) { - emit_error("Invalid URI character is found in a named tag handle."); + if (len == 1) { + // 0 is omitted after the decimal point + return node_type::FLOAT; } + node_type ret = scan_after_decimal_point(++itr, --len, true); + return (ret == node_type::STRING) ? node_type::STRING : node_type::FLOAT; + } + case 'e': + case 'E': + return (len > 1) ? scan_after_exponent(++itr, --len, has_decimal_point) : node_type::STRING; + default: + return node_type::STRING; } } - /// @brief Scan a scalar token, either plain, single-quoted or double-quoted. - /// @param token The token into which the scan result is written. - /// @return lexical_token_t The lexical token type for strings. - void scan_scalar(lexical_token& token) { - m_value_buffer.clear(); + /// @brief Detects a scalar value type by scanning the contents right after a decimal point. + /// @param itr The iterator to the past-the-decimal-point element of the scalar. + /// @param len The length of the scalar left unscanned. + /// @param has_decimal_point Whether the decimal point has already been found in the previous part. + /// @return A detected scalar value type. + static node_type scan_after_decimal_point(const char* itr, uint32_t len, bool has_decimal_point) noexcept { + FK_YAML_ASSERT(len > 0); - bool needs_last_single_quote = false; - bool needs_last_double_quote = false; - if (m_cur_itr == m_token_begin_itr) { - needs_last_single_quote = (*m_cur_itr == '\''); - needs_last_double_quote = (*m_cur_itr == '\"'); - if (needs_last_double_quote || needs_last_single_quote) { - m_token_begin_itr = ++m_cur_itr; - token.type = needs_last_double_quote ? lexical_token_t::DOUBLE_QUOTED_SCALAR - : lexical_token_t::SINGLE_QUOTED_SCALAR; - } - else { - token.type = lexical_token_t::PLAIN_SCALAR; - } + if (is_digit(*itr)) { + return (len > 1) ? scan_decimal_number(++itr, --len, has_decimal_point) : node_type::FLOAT; } - bool is_value_buff_used = extract_string_token(needs_last_single_quote, needs_last_double_quote); + return node_type::STRING; + } + + /// @brief Detects a scalar value type by scanning the contents right after the exponent prefix ("e" or "E"). + /// @param itr The iterator to the past-the-exponent-prefix element of the scalar. + /// @param len The length of the scalar left unscanned. + /// @param has_decimal_point Whether the decimal point has already been found in the previous part. + /// @return A detected scalar value type. + static node_type scan_after_exponent(const char* itr, uint32_t len, bool has_decimal_point) noexcept { + FK_YAML_ASSERT(len > 0); - if (is_value_buff_used) { - token.str = str_view {m_value_buffer.begin(), m_value_buffer.end()}; + if (is_digit(*itr)) { + return (len > 1) ? scan_decimal_number(++itr, --len, has_decimal_point) : node_type::FLOAT; } - else { - token.str = str_view {m_token_begin_itr, m_cur_itr}; - if (token.type != lexical_token_t::PLAIN_SCALAR) { - // If extract_string_token() didn't use m_value_buffer to store mutated scalar value, m_cur_itr is at - // the last quotation mark, which will cause infinite loops from the next get_next_token() call. - ++m_cur_itr; - } + + switch (*itr) { + case '+': + case '-': + return (len > 1) ? scan_decimal_number(++itr, --len, has_decimal_point) : node_type::STRING; + default: + return node_type::STRING; } } - /// @brief Check if the given character is allowed in a single-quoted scalar token. - /// @param c The character to be checked. - /// @param is_value_buffer_used true is assigned when mutated scalar contents is written into m_value_buffer. - /// @return true if the given character is allowed, false otherwise. - bool is_allowed_single(char c, bool& is_value_buffer_used) { - switch (c) { - case '\n': { - is_value_buffer_used = true; + /// @brief Detects a scalar value type by scanning the contents assuming octal numbers. + /// @param itr The iterator to the octal-number element of the scalar. + /// @param len The length of the scalar left unscanned. + /// @return A detected scalar value type. + static node_type scan_octal_number(const char* itr, uint32_t len) noexcept { + FK_YAML_ASSERT(len > 0); - // discard trailing white spaces which preceeds the line break in the current line. - auto before_trailing_spaces_itr = m_cur_itr - 1; - bool ends_loop = false; - while (before_trailing_spaces_itr != m_token_begin_itr) { - switch (*before_trailing_spaces_itr) { - case ' ': - case '\t': - --before_trailing_spaces_itr; - break; - default: - ends_loop = true; - break; - } + switch (*itr) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + return (len > 1) ? scan_octal_number(++itr, --len) : node_type::INTEGER; + default: + return node_type::STRING; + } + } - if (ends_loop) { - break; - } - } - m_value_buffer.append(m_token_begin_itr, before_trailing_spaces_itr + 1); + /// @brief Detects a scalar value type by scanning the contents assuming hexadecimal numbers. + /// @param itr The iterator to the hexadecimal-number element of the scalar. + /// @param len The length of the scalar left unscanned. + /// @return A detected scalar value type. + static node_type scan_hexadecimal_number(const char* itr, uint32_t len) noexcept { + FK_YAML_ASSERT(len > 0); - // move to the beginning of the next line. - ++m_cur_itr; + if (is_xdigit(*itr)) { + return (len > 1) ? scan_hexadecimal_number(++itr, --len) : node_type::INTEGER; + } + return node_type::STRING; + } +}; - // apply line folding according to the number of following empty lines. - m_pos_tracker.update_position(m_cur_itr); - uint32_t line_after_line_break = m_pos_tracker.get_lines_read(); - skip_white_spaces_and_newline_codes(); - m_pos_tracker.update_position(m_cur_itr); - uint32_t trailing_empty_lines = m_pos_tracker.get_lines_read() - line_after_line_break; - if (trailing_empty_lines > 0) { - m_value_buffer.append(trailing_empty_lines, '\n'); - } - else { - m_value_buffer.push_back(' '); - } +FK_YAML_DETAIL_NAMESPACE_END - m_token_begin_itr = (m_cur_itr == m_end_itr || *m_cur_itr == '\'') ? m_cur_itr-- : m_cur_itr; - return true; - } +#endif /* FK_YAML_DETAIL_INPUT_SCALAR_SCANNER_HPP */ - case '\'': - if (m_cur_itr + 1 == m_end_itr) { - if (is_value_buffer_used) { - m_value_buffer.append(m_token_begin_itr, m_cur_itr++); - m_token_begin_itr = m_cur_itr; - } - return false; - } +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT - if (*(m_cur_itr + 1) != '\'') { - if (is_value_buffer_used) { - m_value_buffer.append(m_token_begin_itr, m_cur_itr++); - } - return false; - } +#ifndef FK_YAML_DETAIL_INPUT_TAG_T_HPP +#define FK_YAML_DETAIL_INPUT_TAG_T_HPP - // If single quotation marks are repeated twice in a single-quoted string token, - // they are considered as an escaped single quotation mark. - is_value_buffer_used = true; +// #include - m_value_buffer.append(m_token_begin_itr, ++m_cur_itr); - m_token_begin_itr = m_cur_itr + 1; - return true; - default: // LCOV_EXCL_LINE - return true; // LCOV_EXCL_LINE - } - } +FK_YAML_DETAIL_NAMESPACE_BEGIN - /// @brief Check if the given character is allowed in a double-quoted scalar token. - /// @param c The character to be checked. - /// @param is_value_buffer_used true is assigned when mutated scalar contents is written into m_value_buffer. - /// @return true if the given character is allowed, false otherwise. - bool is_allowed_double(char c, bool& is_value_buffer_used) { - switch (c) { - case '\n': { - is_value_buffer_used = true; +/// @brief Definition of YAML tag types. +enum class tag_t { + NONE, //!< Represents a non-specific tag "?". + NON_SPECIFIC, //!< Represents a non-specific tag "!". + CUSTOM_TAG, //!< Represents a custom tag + SEQUENCE, //!< Represents a sequence tag. + MAPPING, //!< Represents a mapping tag. + NULL_VALUE, //!< Represents a null value tag. + BOOLEAN, //!< Represents a boolean tag. + INTEGER, //!< Represents an integer type + FLOATING_NUMBER, //!< Represents a floating point number tag. + STRING, //!< Represents a string tag. +}; - // discard trailing white spaces which preceeds the line break in the current line. - auto before_trailing_spaces_itr = m_cur_itr - 1; - bool ends_loop = false; - while (before_trailing_spaces_itr != m_token_begin_itr) { - switch (*before_trailing_spaces_itr) { - case ' ': - case '\t': - --before_trailing_spaces_itr; - break; - default: - ends_loop = true; - break; - } +FK_YAML_DETAIL_NAMESPACE_END - if (ends_loop) { - break; - } - } - m_value_buffer.append(m_token_begin_itr, before_trailing_spaces_itr + 1); +#endif /* FK_YAML_DETAIL_INPUT_TAG_T_HPP */ - // move to the beginning of the next line. - ++m_cur_itr; +// #include - // apply line folding according to the number of following empty lines. - m_pos_tracker.update_position(m_cur_itr); - uint32_t line_after_line_break = m_pos_tracker.get_lines_read(); - skip_white_spaces_and_newline_codes(); - m_pos_tracker.update_position(m_cur_itr); - uint32_t trailing_empty_lines = m_pos_tracker.get_lines_read() - line_after_line_break; - if (trailing_empty_lines > 0) { - m_value_buffer.append(trailing_empty_lines, '\n'); - } - else { - m_value_buffer.push_back(' '); - } +// #include - m_token_begin_itr = (m_cur_itr == m_end_itr || *m_cur_itr == '\"') ? m_cur_itr-- : m_cur_itr; - return true; - } +// #include - case '\"': - if (is_value_buffer_used) { - m_value_buffer.append(m_token_begin_itr, m_cur_itr++); - } - return false; +// #include - case '\\': - is_value_buffer_used = true; +// #include - m_value_buffer.append(m_token_begin_itr, m_cur_itr); - // Handle escaped characters. - // See https://yaml.org/spec/1.2.2/#57-escaped-characters for more details. +FK_YAML_DETAIL_NAMESPACE_BEGIN - c = *(m_cur_itr + 1); - if (c != '\n') { - bool is_valid_escaping = yaml_escaper::unescape(m_cur_itr, m_end_itr, m_value_buffer); - if FK_YAML_UNLIKELY (!is_valid_escaping) { - emit_error("Unsupported escape sequence is found in a string token."); - } +/// @brief A parser for YAML scalars. +/// @tparam BasicNodeType A type of the container for parsed YAML scalars. +template +class scalar_parser { + static_assert(is_basic_node::value, "scalar_parser only accepts basic_node<...>"); - m_token_begin_itr = m_cur_itr + 1; - return true; - } +public: + using basic_node_type = BasicNodeType; - // move until the next non-space character is found. - m_cur_itr += 2; - skip_white_spaces(); +private: + /** A type for boolean node values. */ + using boolean_type = typename basic_node_type::boolean_type; + /** A type for integer node values. */ + using integer_type = typename basic_node_type::integer_type; + /** A type for floating point node values. */ + using float_number_type = typename basic_node_type::float_number_type; + /** A type for string node values. */ + using string_type = typename basic_node_type::string_type; - m_token_begin_itr = (m_cur_itr == m_end_itr || *m_cur_itr == '\"') ? m_cur_itr-- : m_cur_itr; - return true; +public: + /// @brief Constructs a new scalar_parser object. + /// @param line Current line. + /// @param indent Current indentation. + scalar_parser(uint32_t line, uint32_t indent) noexcept + : m_line(line), + m_indent(indent) { + } + + /// @brief Destroys a scalar_parser object. + ~scalar_parser() noexcept = default; + + // std::string's copy constructor/assignment operator may throw a exception. + scalar_parser(const scalar_parser&) = default; + scalar_parser& operator=(const scalar_parser&) = default; + + scalar_parser(scalar_parser&&) noexcept = default; + scalar_parser& operator=(scalar_parser&&) noexcept = default; + + /// @brief Parses a token into a flow scalar (either plain, single quoted or double quoted) + /// @param lex_type Lexical token type for the scalar. + /// @param tag_type Tag type for the scalar. + /// @param token Scalar contents. + /// @return Parsed YAML flow scalar object. + basic_node_type parse_flow(lexical_token_t lex_type, tag_t tag_type, str_view token) { + FK_YAML_ASSERT( + lex_type == lexical_token_t::PLAIN_SCALAR || lex_type == lexical_token_t::SINGLE_QUOTED_SCALAR || + lex_type == lexical_token_t::DOUBLE_QUOTED_SCALAR); + FK_YAML_ASSERT(tag_type != tag_t::SEQUENCE && tag_type != tag_t::MAPPING); + + token = parse_flow_scalar_token(lex_type, token); + node_type value_type = decide_value_type(lex_type, tag_type, token); + return create_scalar_node(value_type, token); + } + + /// @brief Parses a token into a block scalar (either literal or folded) + /// @param lex_type Lexical token type for the scalar. + /// @param tag_type Tag type for the scalar. + /// @param token Scalar contents. + /// @param header Block scalar header information. + /// @return Parsed YAML block scalar object. + basic_node_type parse_block( + lexical_token_t lex_type, tag_t tag_type, str_view token, const block_scalar_header& header) { + FK_YAML_ASSERT( + lex_type == lexical_token_t::BLOCK_LITERAL_SCALAR || lex_type == lexical_token_t::BLOCK_FOLDED_SCALAR); + FK_YAML_ASSERT(tag_type != tag_t::SEQUENCE && tag_type != tag_t::MAPPING); - default: // LCOV_EXCL_LINE - return true; // LCOV_EXCL_LINE + if (lex_type == lexical_token_t::BLOCK_LITERAL_SCALAR) { + token = parse_block_literal_scalar(token, header); + } + else { + token = parse_block_folded_scalar(token, header); } - } - /// @brief Check if the given character is allowed in a plain scalar token outside a flow context. - /// @param c The character to be checked. - /// @return true if the given character is allowed, false otherwise. - bool is_allowed_plain(char c, bool& /*unused*/) { - switch (c) { - case '\n': - return false; + node_type value_type = decide_value_type(lex_type, tag_type, token); + return create_scalar_node(value_type, token); + } - case ' ': { - // Allow a space in a plain scalar only if the space is surrounded by non-space characters. - // See https://yaml.org/spec/1.2.2/#733-plain-style for more details. +private: + /// @brief Parses a token into a flow scalar contents. + /// @param lex_type Lexical token type for the scalar. + /// @param token Scalar contents. + /// @return View into the parsed scalar contents. + str_view parse_flow_scalar_token(lexical_token_t lex_type, str_view token) { + switch (lex_type) { + case lexical_token_t::SINGLE_QUOTED_SCALAR: + token = parse_single_quoted_scalar(token); + break; + case lexical_token_t::DOUBLE_QUOTED_SCALAR: + token = parse_double_quoted_scalar(token); + break; + case lexical_token_t::PLAIN_SCALAR: + default: + break; + } - switch (*(m_cur_itr + 1)) { - case ':': { - // " :" is permitted in a plain style string token, but not when followed by a space. - char peeked = *(m_cur_itr + 2); - if (peeked == ' ') { - return false; - } - return true; - } - case ' ': - case '\n': - case '#': - case '\\': - return false; - } + return token; + } - return true; + /// @brief Parses single quoted scalar contents. + /// @param token Scalar contents. + /// @return View into the parsed scalar contents. + str_view parse_single_quoted_scalar(str_view token) noexcept { + if (token.empty()) { + return token; } - case ':': { - // A colon as a key separator must be followed by - // * a white space or - // * a newline code. - switch (*(m_cur_itr + 1)) { - case ' ': - case '\t': - case '\n': - return false; - } - return true; + constexpr str_view filter = "\'\n"; + std::size_t pos = token.find_first_of(filter); + if (pos == str_view::npos) { + return token; } - default: // LCOV_EXCL_LINE - return true; // LCOV_EXCL_LINE - } - } + m_use_owned_buffer = true; - /// @brief Check if the given character is allowed in a plain scalar token inside a flow context. - /// @param c The character to be checked. - /// @return true if the given character is allowed, false otherwise. - bool is_allowed_plain_flow(char c, bool& /*unused*/) { - switch (c) { - case '\n': - return false; + if (m_buffer.capacity() < token.size()) { + m_buffer.reserve(token.size()); + } - case ' ': { - // Allow a space in an unquoted string only if the space is surrounded by non-space characters. - // See https://yaml.org/spec/1.2.2/#733-plain-style for more details. - char next = *(m_cur_itr + 1); + do { + FK_YAML_ASSERT(pos < token.size()); + FK_YAML_ASSERT(token[pos] == '\'' || token[pos] == '\n'); - // These characters are permitted when not inside a flow collection, and not inside an implicit key. - // TODO: Support detection of implicit key context for this check. - switch (next) { - case '{': - case '}': - case '[': - case ']': - case ',': - return false; + if (token[pos] == '\'') { + // unescape escaped single quote. ('' -> ') + FK_YAML_ASSERT(pos + 1 < token.size()); + m_buffer.append(token.begin(), token.begin() + (pos + 1)); + token.remove_prefix(pos + 2); // move next to the escaped single quote. } - - // " :" is permitted in a plain style string token, but not when followed by a space. - if (next == ':') { - char peeked = *(m_cur_itr + 2); - if (peeked == ' ') { - return false; - } + else { + process_line_folding(token, pos); } - switch (next) { - case ' ': - case '\n': - case '#': - case '\\': - return false; - } + pos = token.find_first_of(filter); + } while (pos != str_view::npos); - return true; + if (!token.empty()) { + m_buffer.append(token.begin(), token.size()); } - case ':': { - char next = *(m_cur_itr + 1); + return {m_buffer}; + } - // A colon as a key separator must be followed by - // * a white space or - // * a newline code. - switch (next) { - case ' ': - case '\t': - case '\n': - return false; - } - return true; + /// @brief Parses double quoted scalar contents. + /// @param token Scalar contents. + /// @return View into the parsed scalar contents. + str_view parse_double_quoted_scalar(str_view token) { + if (token.empty()) { + return token; } - case '{': - case '}': - case '[': - case ']': - case ',': - return false; - - default: // LCOV_EXCL_LINE - return true; // LCOV_EXCL_LINE + constexpr str_view filter = "\\\n"; + std::size_t pos = token.find_first_of(filter); + if (pos == str_view::npos) { + return token; } - } - /// @brief Extracts a string token, either plain, single-quoted or double-quoted, from the input buffer. - /// @return true if mutated scalar contents is stored in m_value_buffer, false otherwise. - bool extract_string_token(bool needs_last_single_quote, bool needs_last_double_quote) { - // change behaviors depending on the type of a comming string scalar token. - // * single quoted - // * double quoted - // * plain + m_use_owned_buffer = true; - std::string check_filters {"\n"}; - bool (lexical_analyzer::*pfn_is_allowed)(char, bool&) = nullptr; - - if (needs_last_single_quote) { - check_filters.append("\'"); - pfn_is_allowed = &lexical_analyzer::is_allowed_single; - } - else if (needs_last_double_quote) { - check_filters.append("\"\\"); - pfn_is_allowed = &lexical_analyzer::is_allowed_double; - } - else if (m_flow_context_depth == 0) { - // plain scalar outside flow contexts - check_filters.append(" :"); - pfn_is_allowed = &lexical_analyzer::is_allowed_plain; - } - else { - // plain scalar inside flow contexts - check_filters.append(" :{}[],"); - pfn_is_allowed = &lexical_analyzer::is_allowed_plain_flow; + if (m_buffer.capacity() < token.size()) { + m_buffer.reserve(token.size()); } - // scan the contents of a string scalar token. - - bool is_value_buffer_used = false; - for (; m_cur_itr != m_end_itr; ++m_cur_itr) { - char current = *m_cur_itr; - uint32_t num_bytes = utf8::get_num_bytes(static_cast(current)); - if FK_YAML_LIKELY (num_bytes == 1) { - auto ret = check_filters.find(current); - if (ret != std::string::npos) { - bool is_allowed = (this->*pfn_is_allowed)(current, is_value_buffer_used); - if (!is_allowed) { - return is_value_buffer_used; + do { + FK_YAML_ASSERT(pos < token.size()); + FK_YAML_ASSERT(token[pos] == '\\' || token[pos] == '\n'); + + if (token[pos] == '\\') { + FK_YAML_ASSERT(pos + 1 < token.size()); + m_buffer.append(token.begin(), token.begin() + pos); + + if (token[pos + 1] != '\n') { + token.remove_prefix(pos); + const char* p_escape_begin = token.begin(); + bool is_valid_escaping = yaml_escaper::unescape(p_escape_begin, token.end(), m_buffer); + if FK_YAML_UNLIKELY (!is_valid_escaping) { + throw parse_error( + "Unsupported escape sequence is found in a double quoted scalar.", m_line, m_indent); } - continue; + // `p_escape_begin` points to the last element of the escape sequence. + token.remove_prefix((p_escape_begin - token.begin()) + 1); } - - // Handle unescaped control characters. - if FK_YAML_UNLIKELY (static_cast(current) <= 0x1F) { - handle_unescaped_control_char(current); - continue; + else { + std::size_t non_space_pos = token.find_first_not_of(" \t", pos + 2); + if (non_space_pos == str_view::npos) { + non_space_pos = token.size(); + } + token.remove_prefix(non_space_pos); } - - continue; + } + else { + process_line_folding(token, pos); } - // Multi-byte characters are already validated while creating an input handler. - // So just advance the iterator. - m_cur_itr += num_bytes - 1; - } - - // Handle the end of input buffer. - - if FK_YAML_UNLIKELY (needs_last_double_quote) { - emit_error("Invalid end of input buffer in a double-quoted string token."); - } + pos = token.find_first_of(filter); + } while (pos != str_view::npos); - if FK_YAML_UNLIKELY (needs_last_single_quote) { - emit_error("Invalid end of input buffer in a single-quoted string token."); + if (!token.empty()) { + m_buffer.append(token.begin(), token.size()); } - return is_value_buffer_used; + return {m_buffer}; } - /// @brief Scan a block style string token either in the literal or folded style. - /// @param style The style of the given token, either literal or folded. - /// @param chomp The chomping indicator type of the given token, either strip, keep or clip. - /// @param indent The indent size specified for the given token. - void scan_block_style_string_token(block_style_indicator_t style, chomping_indicator_t chomp, uint32_t indent) { - m_value_buffer.clear(); + /// @brief Parses block literal scalar contents. + /// @param token Scalar contents. + /// @param header Block scalar header information. + /// @return View into the parsed scalar contents. + str_view parse_block_literal_scalar(str_view token, const block_scalar_header& header) { + if FK_YAML_UNLIKELY (token.empty()) { + return token; + } - // Handle leading all-space lines. - for (char current = 0; m_cur_itr != m_end_itr; ++m_cur_itr) { - current = *m_cur_itr; + m_use_owned_buffer = true; + m_buffer.reserve(token.size()); - if (current == ' ') { - continue; + std::size_t cur_line_begin_pos = 0; + do { + bool has_newline_at_end = true; + std::size_t cur_line_end_pos = token.find('\n', cur_line_begin_pos); + if (cur_line_end_pos == str_view::npos) { + has_newline_at_end = false; + cur_line_end_pos = token.size(); } - if (current == '\n') { - m_value_buffer.push_back('\n'); - continue; - } + std::size_t line_size = cur_line_end_pos - cur_line_begin_pos; + str_view line = token.substr(cur_line_begin_pos, line_size); - break; - } + if (line.size() > header.indent) { + m_buffer.append(line.begin() + header.indent, line.end()); + } - if (m_cur_itr == m_end_itr) { - if (chomp != chomping_indicator_t::KEEP) { - m_value_buffer.clear(); + if (!has_newline_at_end) { + break; } - return; - } - m_pos_tracker.update_position(m_cur_itr); - uint32_t cur_indent = m_pos_tracker.get_cur_pos_in_line(); + m_buffer.push_back('\n'); + cur_line_begin_pos = cur_line_end_pos + 1; + } while (cur_line_begin_pos < token.size()); - // TODO: preserve and compare the last indentation with `cur_indent` - if (indent == 0) { - indent = cur_indent; - } - else if FK_YAML_UNLIKELY (cur_indent < indent) { - emit_error("A block style scalar is less indented than the indicated level."); - } + process_chomping(header.chomp); - uint32_t chars_in_line = 0; - bool is_extra_indented = false; - m_token_begin_itr = m_cur_itr; - if (cur_indent > indent) { - if (style == block_style_indicator_t::FOLDED) { - m_value_buffer.push_back('\n'); - is_extra_indented = true; - } + return {m_buffer}; + } - uint32_t diff = cur_indent - indent; - m_token_begin_itr -= diff; - chars_in_line = diff; + /// @brief Parses block folded scalar contents. + /// @param token Scalar contents. + /// @param header Block scalar header information. + /// @return View into the parsed scalar contents. + str_view parse_block_folded_scalar(str_view token, const block_scalar_header& header) { + if FK_YAML_UNLIKELY (token.empty()) { + return token; } - for (; m_cur_itr != m_end_itr; ++m_cur_itr) { - char current = *m_cur_itr; - if (current == '\n') { - if (style == block_style_indicator_t::LITERAL) { - if (chars_in_line == 0) { - m_value_buffer.push_back('\n'); - } - else { - m_value_buffer.append(m_token_begin_itr, m_cur_itr + 1); - } - } - // block_style_indicator_t::FOLDED - else if (chars_in_line == 0) { - // Just append a newline if the current line is empty. - m_value_buffer.push_back('\n'); - } - else if (is_extra_indented) { - // A line being more indented is not folded. - m_value_buffer.append(m_token_begin_itr, m_cur_itr + 1); - } - else { - m_value_buffer.append(m_token_begin_itr, m_cur_itr); - - // Append a newline if the next line is empty. - bool is_end_of_token = false; - bool is_next_empty = false; - for (uint32_t i = 0; i < indent; i++) { - if (++m_cur_itr == m_end_itr) { - is_end_of_token = true; - break; - } + m_use_owned_buffer = true; + m_buffer.reserve(token.size()); - char c = *m_cur_itr; - if (c == ' ') { - continue; - } + std::size_t cur_line_begin_pos = 0; + bool has_newline_at_end = true; + bool can_be_folded = false; + do { + std::size_t cur_line_end_pos = token.find('\n', cur_line_begin_pos); + if (cur_line_end_pos == str_view::npos) { + has_newline_at_end = false; + cur_line_end_pos = token.size(); + } - if (c == '\n') { - is_next_empty = true; - break; - } + std::size_t line_size = cur_line_end_pos - cur_line_begin_pos; + str_view line = token.substr(cur_line_begin_pos, line_size); - is_end_of_token = true; - break; - } + if (line.size() <= header.indent) { + // empty or less-indented lines are turned into a newline + m_buffer.push_back('\n'); + can_be_folded = false; + } + else { + std::size_t non_space_pos = line.find_first_not_of(' '); + bool is_more_indented = (non_space_pos != str_view::npos) && (non_space_pos > header.indent); - if (is_end_of_token) { - m_value_buffer.push_back('\n'); - chars_in_line = 0; - break; + if (can_be_folded) { + if (is_more_indented) { + // The content line right before more-indented lines is not folded. + m_buffer.push_back('\n'); } - - if (is_next_empty) { - m_value_buffer.push_back('\n'); - chars_in_line = 0; - continue; + else { + m_buffer.push_back(' '); } - switch (char next = *(m_cur_itr + 1)) { - case '\n': - ++m_cur_itr; - m_value_buffer.push_back(next); - break; - case ' ': - // The next line is more indented, so a newline will be appended in the coming loops. - break; - default: - m_value_buffer.push_back(' '); - break; - } + can_be_folded = false; } - // Reset the values for the next line. - m_token_begin_itr = m_cur_itr + 1; - chars_in_line = 0; - is_extra_indented = false; - - continue; - } + m_buffer.append(line.begin() + header.indent, line.end()); - // Handle indentation - if (chars_in_line == 0) { - m_pos_tracker.update_position(m_cur_itr); - cur_indent = m_pos_tracker.get_cur_pos_in_line(); - if (cur_indent < indent) { - if (current != ' ') { - // Interpret less indented non-space characters as the start of the next token. - break; - } - // skip a space if not yet indented enough - continue; + if (is_more_indented && has_newline_at_end) { + // more-indented lines are not folded. + m_buffer.push_back('\n'); } - - if (current == ' ' && style == block_style_indicator_t::FOLDED) { - // A line being more indented is not folded. - m_value_buffer.push_back('\n'); - is_extra_indented = true; + else { + can_be_folded = true; } - m_token_begin_itr = m_cur_itr; } - ++chars_in_line; + if (!has_newline_at_end) { + break; + } + + cur_line_begin_pos = cur_line_end_pos + 1; + } while (cur_line_begin_pos < token.size()); + + if (has_newline_at_end && can_be_folded) { + // The final content line break are not folded. + m_buffer.push_back('\n'); } - if (chars_in_line > 0) { - m_value_buffer.append(m_token_begin_itr, m_cur_itr); - } + process_chomping(header.chomp); + + return {m_buffer}; + } - // Manipulate the trailing line endings chomping indicator type. + /// @brief Discards final content line break and trailing empty lines depending on the given chomping type. + /// @param chomp Chomping method type. + void process_chomping(chomping_indicator_t chomp) { switch (chomp) { - case chomping_indicator_t::STRIP: - while (!m_value_buffer.empty()) { - // Empty strings are handled above, so no check for the case. - char last = m_value_buffer.back(); - if (last != '\n') { - break; - } - m_value_buffer.pop_back(); + case chomping_indicator_t::STRIP: { + std::size_t content_end_pos = m_buffer.find_last_not_of('\n'); + if (content_end_pos == std::string::npos) { + // if the scalar has no content line, all lines are considered as trailing empty lines. + m_buffer.clear(); + break; + } + + if (content_end_pos == m_buffer.size() - 1) { + // no last content line break nor trailing empty lines. + break; } + + // remove the last content line break and all trailing empty lines. + m_buffer.erase(content_end_pos + 1); + break; + } case chomping_indicator_t::CLIP: { - char last = m_value_buffer.back(); - if (last != '\n') { - // No need to chomp the trailing newlines. + std::size_t content_end_pos = m_buffer.find_last_not_of('\n'); + if (content_end_pos == std::string::npos) { + // if the scalar has no content line, all lines are considered as trailing empty lines. + m_buffer.clear(); break; } - uint32_t buf_size = static_cast(m_value_buffer.size()); - while (buf_size > 1) { - // Strings with only newlines are handled above, so no check for the case. - char second_last = m_value_buffer[buf_size - 2]; - if (second_last != '\n') { - break; - } - m_value_buffer.pop_back(); - --buf_size; + + if (content_end_pos == m_buffer.size() - 1) { + // no trailing empty lines + break; } + + // remove all trailing empty lines. + m_buffer.erase(content_end_pos + 2); + break; } case chomping_indicator_t::KEEP: @@ -5265,217 +5920,171 @@ class lexical_analyzer { } } - /// @brief Handle unescaped control characters. - /// @param c A target character. - void handle_unescaped_control_char(char c) { - FK_YAML_ASSERT(0x00 <= c && c <= 0x1F); - - switch (c) { - // 0x00(NULL) has already been handled above. - case 0x01: - emit_error("Control character U+0001 (SOH) must be escaped to \\u0001."); - case 0x02: - emit_error("Control character U+0002 (STX) must be escaped to \\u0002."); - case 0x03: - emit_error("Control character U+0003 (ETX) must be escaped to \\u0003."); - case 0x04: - emit_error("Control character U+0004 (EOT) must be escaped to \\u0004."); - case 0x05: - emit_error("Control character U+0005 (ENQ) must be escaped to \\u0005."); - case 0x06: - emit_error("Control character U+0006 (ACK) must be escaped to \\u0006."); - case 0x07: - emit_error("Control character U+0007 (BEL) must be escaped to \\a or \\u0007."); - case 0x08: - emit_error("Control character U+0008 (BS) must be escaped to \\b or \\u0008."); - case 0x09: // HT - // horizontal tabs (\t) are safe to use without escaping. - break; - // 0x0A(LF) has already been handled above. - case 0x0B: - emit_error("Control character U+000B (VT) must be escaped to \\v or \\u000B."); - case 0x0C: - emit_error("Control character U+000C (FF) must be escaped to \\f or \\u000C."); - // 0x0D(CR) has already been handled above. - case 0x0E: - emit_error("Control character U+000E (SO) must be escaped to \\u000E."); - case 0x0F: - emit_error("Control character U+000F (SI) must be escaped to \\u000F."); - case 0x10: - emit_error("Control character U+0010 (DLE) must be escaped to \\u0010."); - case 0x11: - emit_error("Control character U+0011 (DC1) must be escaped to \\u0011."); - case 0x12: - emit_error("Control character U+0012 (DC2) must be escaped to \\u0012."); - case 0x13: - emit_error("Control character U+0013 (DC3) must be escaped to \\u0013."); - case 0x14: - emit_error("Control character U+0014 (DC4) must be escaped to \\u0014."); - case 0x15: - emit_error("Control character U+0015 (NAK) must be escaped to \\u0015."); - case 0x16: - emit_error("Control character U+0016 (SYN) must be escaped to \\u0016."); - case 0x17: - emit_error("Control character U+0017 (ETB) must be escaped to \\u0017."); - case 0x18: - emit_error("Control character U+0018 (CAN) must be escaped to \\u0018."); - case 0x19: - emit_error("Control character U+0019 (EM) must be escaped to \\u0019."); - case 0x1A: - emit_error("Control character U+001A (SUB) must be escaped to \\u001A."); - case 0x1B: - emit_error("Control character U+001B (ESC) must be escaped to \\e or \\u001B."); - case 0x1C: - emit_error("Control character U+001C (FS) must be escaped to \\u001C."); - case 0x1D: - emit_error("Control character U+001D (GS) must be escaped to \\u001D."); - case 0x1E: - emit_error("Control character U+001E (RS) must be escaped to \\u001E."); - case 0x1F: - emit_error("Control character U+001F (US) must be escaped to \\u001F."); + /// @brief Applies line folding to flow scalar contents. + /// @param token Flow scalar contents. + /// @param newline_pos Position of the target newline code. + void process_line_folding(str_view& token, std::size_t newline_pos) noexcept { + // discard trailing white spaces which precedes the line break in the current line. + std::size_t last_non_space_pos = token.substr(0, newline_pos + 1).find_last_not_of(" \t"); + if (last_non_space_pos == str_view::npos) { + m_buffer.append(token.begin(), newline_pos); } - } - - /// @brief Gets the metadata of a following block style string scalar. - /// @param chomp_type A variable to store the retrieved chomping style type. - /// @param indent A variable to store the retrieved indent size. - void get_block_style_metadata(chomping_indicator_t& chomp_type, uint32_t& indent) { - chomp_type = chomping_indicator_t::CLIP; - indent = 0; + else { + m_buffer.append(token.begin(), last_non_space_pos + 1); + } + token.remove_prefix(newline_pos + 1); // move next to the LF - while (m_cur_itr != m_end_itr) { - switch (*m_cur_itr) { - case '-': - if FK_YAML_UNLIKELY (chomp_type != chomping_indicator_t::CLIP) { - emit_error("Too many block chomping indicators specified."); - } - chomp_type = chomping_indicator_t::STRIP; - break; - case '+': - if FK_YAML_UNLIKELY (chomp_type != chomping_indicator_t::CLIP) { - emit_error("Too many block chomping indicators specified."); - } - chomp_type = chomping_indicator_t::KEEP; - break; - case '0': - emit_error("An indentation level for a block scalar cannot be 0."); - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - if FK_YAML_UNLIKELY (indent > 0) { - emit_error("Invalid indentation level for a block scalar. It must be between 1 and 9."); - } - indent = static_cast(*m_cur_itr - '0'); + uint32_t empty_line_counts = 0; + do { + std::size_t non_space_pos = token.find_first_not_of(" \t"); + if (non_space_pos == str_view::npos) { + // Line folding ignores trailing spaces. + token.remove_prefix(token.size()); break; - case ' ': - case '\t': + } + else if (token[non_space_pos] != '\n') { + token.remove_prefix(non_space_pos); break; - case '\n': - ++m_cur_itr; - return; - case '#': - skip_until_line_end(); - return; - default: - emit_error("Invalid character found in a block scalar header."); } - ++m_cur_itr; + token.remove_prefix(non_space_pos + 1); + ++empty_line_counts; + } while (true); + + if (empty_line_counts > 0) { + m_buffer.append(empty_line_counts, '\n'); + } + else { + m_buffer.push_back(' '); } } - /// @brief Skip white spaces (half-width spaces and tabs) from the current position. - void skip_white_spaces() { - m_cur_itr = std::find_if_not(m_cur_itr, m_end_itr, [](char c) { return (c == ' ' || c == '\t'); }); - } + /// @brief Decides scalar value type based on the lexical/tag types and scalar contents. + /// @param lex_type Lexical token type for the scalar. + /// @param tag_type Tag type for the scalar. + /// @param token Scalar contents. + /// @return Scalar value type. + node_type decide_value_type(lexical_token_t lex_type, tag_t tag_type, str_view token) const noexcept { + node_type value_type {node_type::STRING}; + if (lex_type == lexical_token_t::PLAIN_SCALAR) { + value_type = scalar_scanner::scan(token.begin(), token.end()); + } - /// @brief Skip white spaces and newline codes (CR/LF) from the current position. - void skip_white_spaces_and_newline_codes() { - if (m_cur_itr != m_end_itr) { - m_cur_itr = std::find_if_not(m_cur_itr, m_end_itr, [](char c) { - switch (c) { - case ' ': - case '\t': - case '\n': - return true; - default: - return false; - } - }); + switch (tag_type) { + case tag_t::NULL_VALUE: + value_type = node_type::NULL_OBJECT; + break; + case tag_t::BOOLEAN: + value_type = node_type::BOOLEAN; + break; + case tag_t::INTEGER: + value_type = node_type::INTEGER; + break; + case tag_t::FLOATING_NUMBER: + value_type = node_type::FLOAT; + break; + case tag_t::STRING: + value_type = node_type::STRING; + break; + case tag_t::NON_SPECIFIC: + // scalars with the non-specific tag is resolved to a string tag. + // See the "Non-Specific Tags" section in https://yaml.org/spec/1.2.2/#691-node-tags. + value_type = node_type::STRING; + break; + case tag_t::NONE: + case tag_t::CUSTOM_TAG: + default: + break; } + + return value_type; } - /// @brief Skip the rest in the current line. - void skip_until_line_end() { - while (m_cur_itr != m_end_itr) { - switch (*m_cur_itr) { - case '\n': - ++m_cur_itr; - return; - default: - ++m_cur_itr; - break; + /// @brief Creates YAML scalar object based on the value type and contents. + /// @param type Scalar value type. + /// @param token Scalar contents. + /// @return A YAML scalar object. + basic_node_type create_scalar_node(node_type type, str_view token) { + basic_node_type node {}; + + switch (type) { + case node_type::NULL_OBJECT: { + std::nullptr_t null = nullptr; + bool converted = detail::aton(token.begin(), token.end(), null); + if FK_YAML_UNLIKELY (!converted) { + throw parse_error("Failed to convert a scalar to a null.", m_line, m_indent); } + // The above `node` variable is already null, so no instance creation is needed. + break; + } + case node_type::BOOLEAN: { + boolean_type boolean = static_cast(false); + bool converted = detail::atob(token.begin(), token.end(), boolean); + if FK_YAML_UNLIKELY (!converted) { + throw parse_error("Failed to convert a scalar to a boolean.", m_line, m_indent); + } + node = basic_node_type(boolean); + break; + } + case node_type::INTEGER: { + integer_type integer = 0; + bool converted = detail::atoi(token.begin(), token.end(), integer); + if FK_YAML_UNLIKELY (!converted) { + throw parse_error("Failed to convert a scalar to an integer.", m_line, m_indent); + } + node = basic_node_type(integer); + break; + } + case node_type::FLOAT: { + float_number_type float_val = 0; + bool converted = detail::atof(token.begin(), token.end(), float_val); + if FK_YAML_UNLIKELY (!converted) { + throw parse_error("Failed to convert a scalar to a floating point value", m_line, m_indent); + } + node = basic_node_type(float_val); + break; + } + case node_type::STRING: + if (m_use_owned_buffer) { + node = basic_node_type(std::move(m_buffer)); + m_use_owned_buffer = false; + } + else { + node = basic_node_type(std::string(token.begin(), token.end())); + } + break; + default: // LCOV_EXCL_LINE + break; // LCOV_EXCL_LINE } - } - /// @brief Emits an error with the given message. - /// @param msg A message for the resulting error. - [[noreturn]] void emit_error(const char* msg) const { - m_pos_tracker.update_position(m_cur_itr); - throw fkyaml::parse_error(msg, m_pos_tracker.get_lines_read(), m_pos_tracker.get_cur_pos_in_line()); + return node; } -private: - /// An input buffer adapter to be analyzed. - str_view m_input_buffer {}; - /// The iterator to the current character in the input buffer. - const char* m_cur_itr {}; - /// The iterator to the beginning of the current token. - const char* m_token_begin_itr {}; - /// The iterator to the past-the-end element in the input buffer. - const char* m_end_itr {}; - /// The current position tracker of the input buffer. - mutable position_tracker m_pos_tracker {}; - /// A temporal buffer to store a string to be parsed to an actual token value. - std::string m_value_buffer {}; - /// The last yaml version. - str_view m_yaml_version {}; - /// The last tag handle. - str_view m_tag_handle {}; - /// The last tag prefix. - str_view m_tag_prefix {}; - /// The beginning position of the last lexical token. (zero origin) - uint32_t m_last_token_begin_pos {0}; - /// The beginning line of the last lexical token. (zero origin) - uint32_t m_last_token_begin_line {0}; - /// The current depth of flow context. - uint32_t m_flow_context_depth {0}; + /// Current line + uint32_t m_line {0}; + /// Current indentation for the scalar + uint32_t m_indent {0}; + /// Whether the parsed contents are stored in an owned buffer. + bool m_use_owned_buffer {false}; + /// Owned buffer storage for parsing. This buffer is used when scalar contents need mutation. + std::string m_buffer {}; }; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_INPUT_LEXICAL_ANALIZER_HPP_ */ +#endif /* FK_YAML_DETAIL_INPUT_SCALAR_PARSER_HPP */ // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_INPUT_TAG_RESOLVER_HPP_ -#define FK_YAML_DETAIL_INPUT_TAG_RESOLVER_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_INPUT_TAG_RESOLVER_HPP +#define FK_YAML_DETAIL_INPUT_TAG_RESOLVER_HPP #include #include @@ -5487,41 +6096,7 @@ FK_YAML_DETAIL_NAMESPACE_END // #include -// #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_INPUT_TAG_T_HPP_ -#define FK_YAML_DETAIL_INPUT_TAG_T_HPP_ - -// #include - - -FK_YAML_DETAIL_NAMESPACE_BEGIN - -/// @brief Definition of YAML directive sets. -enum class tag_t { - NON_SPECIFIC, //!< Represents a non-specific tag. - CUSTOM_TAG, //!< Represents a cumstom tag - SEQUENCE, //!< Represents a sequence tag. - MAPPING, //!< Represents a mapping tag. - NULL_VALUE, //!< Represents a null value tag. - BOOLEAN, //!< Represents a boolean tag. - INTEGER, //!< Represents an integer type - FLOATING_NUMBER, //!< Represents a floating point number tag. - STRING, //!< Represents a string tag. -}; - -FK_YAML_DETAIL_NAMESPACE_END - -#endif /* FK_YAML_DETAIL_INPUT_TAG_T_HPP_ */ +// #include // #include @@ -5613,523 +6188,202 @@ class tag_resolver { // find the extracted named handle in the map. auto named_handle_itr = directives->named_handle_map.find(tag.substr(0, tag_end_pos + 1)); auto end_itr = directives->named_handle_map.end(); - if FK_YAML_UNLIKELY (named_handle_itr == end_itr) { - throw invalid_tag("named handle has not been registered.", tag.c_str()); - } - - // The YAML spec prohibits expanding the percent-encoded characters (%xx -> a UTF-8 byte). - // So no conversion takes place. - // See https://yaml.org/spec/1.2.2/#56-miscellaneous-characters for more details. - - normalized += named_handle_itr->second; - normalized.append(tag.begin() + (tag_end_pos + 1), tag.end()); - break; - } - - // handle a primary tag handle (!suffix -> !<[primary][suffix]>) - bool is_null_or_empty = !directives || directives->primary_handle_prefix.empty(); - if (is_null_or_empty) { - normalized += default_primary_handle_prefix + tag.substr(1); - } - else { - normalized += directives->primary_handle_prefix + tag.substr(1); - } - - break; - } - } - - normalized += ">"; - return normalized; - } - - static tag_t convert_to_tag_type(const std::string& normalized) { - if (normalized == "!") { - return tag_t::NON_SPECIFIC; - } - - if (normalized.size() < 24 /* size of !") { - return tag_t::SEQUENCE; - } - if (normalized == "!") { - return tag_t::MAPPING; - } - if (normalized == "!") { - return tag_t::NULL_VALUE; - } - if (normalized == "!") { - return tag_t::BOOLEAN; - } - if (normalized == "!") { - return tag_t::INTEGER; - } - if (normalized == "!") { - return tag_t::FLOATING_NUMBER; - } - if (normalized == "!") { - return tag_t::STRING; - } - - return tag_t::CUSTOM_TAG; - } -}; - -FK_YAML_DETAIL_NAMESPACE_END - -#endif /* FK_YAML_DETAIL_INPUT_TAG_RESOLVER_HPP_ */ - -// #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_META_INPUT_ADAPTER_TRAITS_HPP_ -#define FK_YAML_DETAIL_META_INPUT_ADAPTER_TRAITS_HPP_ - -#include -#include -#include -#include - -// #include - -// #include - -// #include - - -#if defined(FK_YAML_HAS_CXX_17) && FK_YAML_HAS_INCLUDE() -#include -#endif - -FK_YAML_DETAIL_NAMESPACE_BEGIN - -/////////////////////////////////////////// -// Input Adapter API detection traits -/////////////////////////////////////////// - -/// @brief A type which represents get_buffer_view function. -/// @tparam T A target type. -template -using get_buffer_view_fn_t = decltype(std::declval().get_buffer_view()); - -/// @brief Type traits to check if InputAdapterType has get_buffer_view member function. -/// @tparam InputAdapterType An input adapter type to check if it has get_buffer_view function. -/// @tparam typename N/A -template -struct has_get_buffer_view : std::false_type {}; - -/// @brief A partial specialization of has_get_buffer_view if InputAdapterType has get_buffer_view member function. -/// @tparam InputAdapterType A type of a target input adapter. -template -struct has_get_buffer_view::value>> - : std::true_type {}; - -//////////////////////////////// -// is_input_adapter traits -//////////////////////////////// - -/// @brief Type traits to check if T is an input adapter type. -/// @tparam T A target type. -/// @tparam typename N/A -template -struct is_input_adapter : std::false_type {}; - -/// @brief A partial specialization of is_input_adapter if T is an input adapter type. -/// @tparam InputAdapterType -template -struct is_input_adapter::value>> : std::true_type { -}; - -///////////////////////////////////////////////// -// traits for contiguous iterator detection -///////////////////////////////////////////////// - -/// @brief Type traits to check if T is a container which has contiguous bytes. -/// @tparam T A target type. -template -struct is_contiguous_container : std::false_type {}; - -/// @brief A partial specialization of is_contiguous_container if T is a std::array. -/// @tparam T Element type. -/// @tparam N Maximum number of elements. -template -struct is_contiguous_container> : std::true_type {}; - -/// @brief A partial specialization of is_contiguous_container if T is a std::basic_string. -/// @tparam CharT Character type. -/// @tparam Traits Character traits type. -/// @tparam Alloc Allocator type. -template -struct is_contiguous_container> : std::true_type {}; - -#ifdef FK_YAML_HAS_CXX_17 - -/// @brief A partial specialization of is_contiguous_container if T is a std::basic_string_view. -/// @tparam CharT Character type. -/// @tparam Traits Character traits type. -template -struct is_contiguous_container> : std::true_type {}; - -#endif // defined(FK_YAML_HAS_CXX_20) - -/// @brief A partial specialization of is_contiguous_container if T is a std::vector. -/// @tparam T Element type. -/// @tparam Alloc Allocator type. -template -struct is_contiguous_container> : std::true_type {}; - -FK_YAML_DETAIL_NAMESPACE_END - -#endif /* FK_YAML_DETAIL_META_INPUT_ADAPTER_TRAITS_HPP_ */ - -// #include - -// #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_INPUT_SCALAR_SCANNER_HPP_ -#define FK_YAML_DETAIL_INPUT_SCALAR_SCANNER_HPP_ - -#include -#include - -// #include - -// #include - -// #include - - -FK_YAML_DETAIL_NAMESPACE_BEGIN - -namespace { - -/// @brief Check if the given character is a digit. -/// @note This function is needed to avoid assertion failures in `std::isdigit()` especially when compiled with MSVC. -/// @param c A character to be checked. -/// @return true if the given character is a digit, false otherwise. -inline bool is_digit(char c) { - return ('0' <= c && c <= '9'); -} - -/// @brief Check if the given character is a hex-digit. -/// @note This function is needed to avoid assertion failures in `std::isxdigit()` especially when compiled with MSVC. -/// @param c A character to be checked. -/// @return true if the given character is a hex-digit, false otherwise. -inline bool is_xdigit(char c) { - return (('0' <= c && c <= '9') || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f')); -} - -} // namespace - -/// @brief The class which detects a scalar value type by scanning contents. -class scalar_scanner { -public: - /// @brief Detects a scalar value type by scanning the contents ranged by the given iterators. - /// @param begin The iterator to the first element of the scalar. - /// @param end The iterator to the past-the-end element of the scalar. - /// @return A detected scalar value type. - static node_type scan(const char* begin, const char* end) { - if (begin == end) { - return node_type::STRING; - } - - uint32_t len = static_cast(std::distance(begin, end)); - if (len > 5) { - return scan_possible_number_token(begin, len); - } - - const char* p_begin = &*begin; - - switch (len) { - case 1: - if (*p_begin == '~') { - return node_type::NULL_OBJECT; - } - break; - case 4: - switch (*p_begin) { - case 'n': - // no possible case of begin a number otherwise. - return (std::strncmp(p_begin + 1, "ull", 3) == 0) ? node_type::NULL_OBJECT : node_type::STRING; - case 'N': - // no possible case of begin a number otherwise. - return ((std::strncmp(p_begin + 1, "ull", 3) == 0) || (std::strncmp(p_begin + 1, "ULL", 3) == 0)) - ? node_type::NULL_OBJECT - : node_type::STRING; - case 't': - // no possible case of being a number otherwise. - return (std::strncmp(p_begin + 1, "rue", 3) == 0) ? node_type::BOOLEAN : node_type::STRING; - case 'T': - // no possible case of being a number otherwise. - return ((std::strncmp(p_begin + 1, "rue", 3) == 0) || (std::strncmp(p_begin + 1, "RUE", 3) == 0)) - ? node_type::BOOLEAN - : node_type::STRING; - case '.': { - const char* p_from_second = p_begin + 1; - bool is_inf_or_nan_scalar = - (std::strncmp(p_from_second, "inf", 3) == 0) || (std::strncmp(p_from_second, "Inf", 3) == 0) || - (std::strncmp(p_from_second, "INF", 3) == 0) || (std::strncmp(p_from_second, "nan", 3) == 0) || - (std::strncmp(p_from_second, "NaN", 3) == 0) || (std::strncmp(p_from_second, "NAN", 3) == 0); - if (is_inf_or_nan_scalar) { - return node_type::FLOAT; + if FK_YAML_UNLIKELY (named_handle_itr == end_itr) { + throw invalid_tag("named handle has not been registered.", tag.c_str()); } - // maybe a number. + + // The YAML spec prohibits expanding the percent-encoded characters (%xx -> a UTF-8 byte). + // So no conversion takes place. + // See https://yaml.org/spec/1.2.2/#56-miscellaneous-characters for more details. + + normalized += named_handle_itr->second; + normalized.append(tag.begin() + (tag_end_pos + 1), tag.end()); break; } + + // handle a primary tag handle (!suffix -> !<[primary][suffix]>) + bool is_null_or_empty = !directives || directives->primary_handle_prefix.empty(); + if (is_null_or_empty) { + normalized += default_primary_handle_prefix + tag.substr(1); } - break; - case 5: - switch (*p_begin) { - case 'f': - // no possible case of being a number otherwise. - return (std::strncmp(p_begin + 1, "alse", 4) == 0) ? node_type::BOOLEAN : node_type::STRING; - case 'F': - // no possible case of being a number otherwise. - return ((std::strncmp(p_begin + 1, "alse", 4) == 0) || (std::strncmp(p_begin + 1, "ALSE", 4) == 0)) - ? node_type::BOOLEAN - : node_type::STRING; - case '+': - case '-': - if (*(p_begin + 1) == '.') { - const char* p_from_third = p_begin + 2; - bool is_min_inf_scalar = (std::strncmp(p_from_third, "inf", 3) == 0) || - (std::strncmp(p_from_third, "Inf", 3) == 0) || - (std::strncmp(p_from_third, "INF", 3) == 0); - if (is_min_inf_scalar) { - return node_type::FLOAT; - } - } - // maybe a number. - break; + else { + normalized += directives->primary_handle_prefix + tag.substr(1); } + break; } + } - return scan_possible_number_token(begin, len); + normalized += ">"; + return normalized; } -private: - /// @brief Detects a scalar value type from the contents (possibly an integer or a floating-point value). - /// @param itr The iterator to the first element of the scalar. - /// @param len The length of the scalar contents. - /// @return A detected scalar value type. - static node_type scan_possible_number_token(const char* itr, uint32_t len) { - FK_YAML_ASSERT(len > 0); - - switch (*itr) { - case '-': - return (len > 1) ? scan_negative_number(++itr, --len) : node_type::STRING; - case '+': - return (len > 1) ? scan_decimal_number(++itr, --len, false) : node_type::STRING; - case '0': - return (len > 1) ? scan_after_zero_at_first(++itr, --len) : node_type::INTEGER; - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - return (len > 1) ? scan_decimal_number(++itr, --len, false) : node_type::INTEGER; - default: - return node_type::STRING; + static tag_t convert_to_tag_type(const std::string& normalized) { + if (normalized == "!") { + return tag_t::NON_SPECIFIC; } - } - /// @brief Detects a scalar value type by scanning the contents right after the negative sign. - /// @param itr The iterator to the past-the-negative-sign element of the scalar. - /// @param len The length of the scalar contents left unscanned. - /// @return A detected scalar value type. - static node_type scan_negative_number(const char* itr, uint32_t len) { - FK_YAML_ASSERT(len > 0); + if (normalized.size() < 24 /* size of ! 1) ? scan_decimal_number(++itr, --len, false) : node_type::INTEGER; + if (normalized == "!") { + return tag_t::SEQUENCE; + } + if (normalized == "!") { + return tag_t::MAPPING; + } + if (normalized == "!") { + return tag_t::NULL_VALUE; + } + if (normalized == "!") { + return tag_t::BOOLEAN; + } + if (normalized == "!") { + return tag_t::INTEGER; + } + if (normalized == "!") { + return tag_t::FLOATING_NUMBER; + } + if (normalized == "!") { + return tag_t::STRING; } - return node_type::STRING; + return tag_t::CUSTOM_TAG; } +}; - /// @brief Detects a scalar value type by scanning the contents right after the beginning 0. - /// @param itr The iterator to the past-the-zero element of the scalar. - /// @param len The length of the scalar left unscanned. - /// @return A detected scalar value type. - static node_type scan_after_zero_at_first(const char* itr, uint32_t len) { - FK_YAML_ASSERT(len > 0); +FK_YAML_DETAIL_NAMESPACE_END - if (is_digit(*itr)) { - // a token consisting of the beginning '0' and some following numbers, e.g., `0123`, is not an integer - // according to https://yaml.org/spec/1.2.2/#10213-integer. - return node_type::STRING; - } +#endif /* FK_YAML_DETAIL_INPUT_TAG_RESOLVER_HPP */ - switch (*itr) { - case '.': { - if (len == 1) { - // 0 is omitted after `0.`. - return node_type::FLOAT; - } - node_type ret = scan_after_decimal_point(++itr, --len, true); - return (ret == node_type::STRING) ? node_type::STRING : node_type::FLOAT; - } - case 'o': - return (len > 1) ? scan_octal_number(++itr, --len) : node_type::STRING; - case 'x': - return (len > 1) ? scan_hexadecimal_number(++itr, --len) : node_type::STRING; - default: - return node_type::STRING; - } - } +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT - /// @brief Detects a scalar value type by scanning the contents part starting with a decimal. - /// @param itr The iterator to the beginning decimal element of the scalar. - /// @param len The length of the scalar left unscanned. - /// @param has_decimal_point Whether a decimal point has already been found in the previous part. - /// @return A detected scalar value type. - static node_type scan_decimal_number(const char* itr, uint32_t len, bool has_decimal_point) { - FK_YAML_ASSERT(len > 0); +#ifndef FK_YAML_DETAIL_META_INPUT_ADAPTER_TRAITS_HPP +#define FK_YAML_DETAIL_META_INPUT_ADAPTER_TRAITS_HPP - if (is_digit(*itr)) { - return (len > 1) ? scan_decimal_number(++itr, --len, has_decimal_point) : node_type::INTEGER; - } +#include +#include +#include +#include - switch (*itr) { - case '.': { - if (has_decimal_point) { - // the token has more than one period, e.g., a semantic version `1.2.3`. - return node_type::STRING; - } - if (len == 1) { - // 0 is omitted after the decimal point - return node_type::FLOAT; - } - node_type ret = scan_after_decimal_point(++itr, --len, true); - return (ret == node_type::STRING) ? node_type::STRING : node_type::FLOAT; - } - case 'e': - case 'E': - return (len > 1) ? scan_after_exponent(++itr, --len, has_decimal_point) : node_type::STRING; - default: - return node_type::STRING; - } - } +// #include - /// @brief Detects a scalar value type by scanning the contents right after a decimal point. - /// @param itr The iterator to the past-the-decimal-point element of the scalar. - /// @param len The length of the scalar left unscanned. - /// @param has_decimal_point Whether the decimal point has already been found in the previous part. - /// @return A detected scalar value type. - static node_type scan_after_decimal_point(const char* itr, uint32_t len, bool has_decimal_point) { - FK_YAML_ASSERT(len > 0); +// #include - if (is_digit(*itr)) { - return (len > 1) ? scan_decimal_number(++itr, --len, has_decimal_point) : node_type::FLOAT; - } +// #include - return node_type::STRING; - } - /// @brief Detects a scalar value type by scanning the contents right after the exponent prefix ("e" or "E"). - /// @param itr The iterator to the past-the-exponent-prefix element of the scalar. - /// @param len The length of the scalar left unscanned. - /// @param has_decimal_point Whether the decimal point has already been found in the previous part. - /// @return A detected scalar value type. - static node_type scan_after_exponent(const char* itr, uint32_t len, bool has_decimal_point) { - FK_YAML_ASSERT(len > 0); +#if defined(FK_YAML_HAS_CXX_17) && FK_YAML_HAS_INCLUDE() +#include +#endif - if (is_digit(*itr)) { - return (len > 1) ? scan_decimal_number(++itr, --len, has_decimal_point) : node_type::FLOAT; - } +FK_YAML_DETAIL_NAMESPACE_BEGIN - switch (*itr) { - case '+': - case '-': - return (len > 1) ? scan_decimal_number(++itr, --len, has_decimal_point) : node_type::STRING; - default: - return node_type::STRING; - } - } +/////////////////////////////////////////// +// Input Adapter API detection traits +/////////////////////////////////////////// + +/// @brief A type which represents get_buffer_view function. +/// @tparam T A target type. +template +using get_buffer_view_fn_t = decltype(std::declval().get_buffer_view()); + +/// @brief Type traits to check if InputAdapterType has get_buffer_view member function. +/// @tparam InputAdapterType An input adapter type to check if it has get_buffer_view function. +/// @tparam typename N/A +template +struct has_get_buffer_view : std::false_type {}; + +/// @brief A partial specialization of has_get_buffer_view if InputAdapterType has get_buffer_view member function. +/// @tparam InputAdapterType A type of a target input adapter. +template +struct has_get_buffer_view::value>> + : std::true_type {}; + +//////////////////////////////// +// is_input_adapter traits +//////////////////////////////// + +/// @brief Type traits to check if T is an input adapter type. +/// @tparam T A target type. +/// @tparam typename N/A +template +struct is_input_adapter : std::false_type {}; + +/// @brief A partial specialization of is_input_adapter if T is an input adapter type. +/// @tparam InputAdapterType +template +struct is_input_adapter::value>> : std::true_type { +}; + +///////////////////////////////////////////////// +// traits for contiguous iterator detection +///////////////////////////////////////////////// + +/// @brief Type traits to check if T is a container which has contiguous bytes. +/// @tparam T A target type. +template +struct is_contiguous_container : std::false_type {}; + +/// @brief A partial specialization of is_contiguous_container if T is a std::array. +/// @tparam T Element type. +/// @tparam N Maximum number of elements. +template +struct is_contiguous_container> : std::true_type {}; - /// @brief Detects a scalar value type by scanning the contents assuming octal numbers. - /// @param itr The iterator to the octal-number element of the scalar. - /// @param len The length of the scalar left unscanned. - /// @return A detected scalar value type. - static node_type scan_octal_number(const char* itr, uint32_t len) { - FK_YAML_ASSERT(len > 0); +/// @brief A partial specialization of is_contiguous_container if T is a std::basic_string. +/// @tparam CharT Character type. +/// @tparam Traits Character traits type. +/// @tparam Alloc Allocator type. +template +struct is_contiguous_container> : std::true_type {}; - switch (*itr) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - return (len > 1) ? scan_octal_number(++itr, --len) : node_type::INTEGER; - default: - return node_type::STRING; - } - } +#ifdef FK_YAML_HAS_CXX_17 - /// @brief Detects a scalar value type by scanning the contents assuming hexadecimal numbers. - /// @param itr The iterator to the hexadecimal-number element of the scalar. - /// @param len The length of the scalar left unscanned. - /// @return A detected scalar value type. - static node_type scan_hexadecimal_number(const char* itr, uint32_t len) { - FK_YAML_ASSERT(len > 0); +/// @brief A partial specialization of is_contiguous_container if T is a std::basic_string_view. +/// @tparam CharT Character type. +/// @tparam Traits Character traits type. +template +struct is_contiguous_container> : std::true_type {}; - if (is_xdigit(*itr)) { - return (len > 1) ? scan_hexadecimal_number(++itr, --len) : node_type::INTEGER; - } - return node_type::STRING; - } -}; +#endif // defined(FK_YAML_HAS_CXX_20) + +/// @brief A partial specialization of is_contiguous_container if T is a std::vector. +/// @tparam T Element type. +/// @tparam Alloc Allocator type. +template +struct is_contiguous_container> : std::true_type {}; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_INPUT_SCALAR_SCANNER_HPP_ */ +#endif /* FK_YAML_DETAIL_META_INPUT_ADAPTER_TRAITS_HPP */ + +// #include // #include // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_NODE_ATTRS_HPP_ -#define FK_YAML_DETAIL_NODE_ATTRS_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_NODE_ATTRS_HPP +#define FK_YAML_DETAIL_NODE_ATTRS_HPP #include #include @@ -6258,21 +6512,19 @@ inline void set_anchor_offset(uint32_t offset, node_attr_t& attrs) noexcept { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_NODE_ATTRS_HPP_ */ +#endif /* FK_YAML_DETAIL_NODE_ATTRS_HPP */ // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_NODE_PROPERTY_HPP_ -#define FK_YAML_DETAIL_NODE_PROPERTY_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_NODE_PROPERTY_HPP +#define FK_YAML_DETAIL_NODE_PROPERTY_HPP #include @@ -6290,7 +6542,7 @@ struct node_property { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_NODE_PROPERTY_HPP_ */ +#endif /* FK_YAML_DETAIL_NODE_PROPERTY_HPP */ // #include @@ -6313,18 +6565,12 @@ class basic_deserializer { using doc_metainfo_type = document_metainfo; /** A type for the tag resolver. */ using tag_resolver_type = tag_resolver; + /** A type for the scalar parser. */ + using scalar_parser_type = scalar_parser; /** A type for sequence node value containers. */ using sequence_type = typename basic_node_type::sequence_type; /** A type for mapping node value containers. */ using mapping_type = typename basic_node_type::mapping_type; - /** A type for boolean node values. */ - using boolean_type = typename basic_node_type::boolean_type; - /** A type for integer node values. */ - using integer_type = typename basic_node_type::integer_type; - /** A type for floating point node values. */ - using float_number_type = typename basic_node_type::float_number_type; - /** A type for string node values. */ - using string_type = typename basic_node_type::string_type; /// @brief Definition of state types of parse contexts. enum class context_state_t { @@ -6424,7 +6670,7 @@ class basic_deserializer { } while (type != lexical_token_t::END_OF_BUFFER); return nodes; - } + } // LCOV_EXCL_LINE private: /// @brief Deserialize a YAML document into a YAML node. @@ -6462,6 +6708,7 @@ class basic_deserializer { } case lexical_token_t::SEQUENCE_FLOW_BEGIN: ++m_flow_context_depth; + lexer.set_context_state(true); root = basic_node_type::sequence(); apply_directive_set(root); apply_node_properties(root); @@ -6471,6 +6718,7 @@ class basic_deserializer { break; case lexical_token_t::MAPPING_FLOW_BEGIN: ++m_flow_context_depth; + lexer.set_context_state(true); root = basic_node_type::mapping(); apply_directive_set(root); apply_node_properties(root); @@ -6478,19 +6726,48 @@ class basic_deserializer { lexer.get_lines_processed(), lexer.get_last_token_begin_pos(), context_state_t::FLOW_MAPPING, &root); token = lexer.get_next_token(); break; - default: { + case lexical_token_t::EXPLICIT_KEY_PREFIX: { + // If the explicit key prefix (? ) is detected here, the root node of current document must be a mapping. + // Also, tag and anchor if any are associated to the root mapping node. + // No get_next_token() call here to handle the token event in the deserialize_node() function. root = basic_node_type::mapping(); apply_directive_set(root); - if (found_props && line < lexer.get_lines_processed()) { - // If node properties and a followed node are on the different line, the properties belong to the root - // node. - apply_node_properties(root); - } + apply_node_properties(root); parse_context context( lexer.get_lines_processed(), lexer.get_last_token_begin_pos(), context_state_t::BLOCK_MAPPING, &root); m_context_stack.emplace_back(std::move(context)); break; } + case lexical_token_t::BLOCK_LITERAL_SCALAR: + case lexical_token_t::BLOCK_FOLDED_SCALAR: + // If a block scalar token is detected here, current document contains single scalar. + // Do nothing here since the token is handled in the deserialize_node() function. + break; + case lexical_token_t::PLAIN_SCALAR: + case lexical_token_t::SINGLE_QUOTED_SCALAR: + case lexical_token_t::DOUBLE_QUOTED_SCALAR: + case lexical_token_t::ALIAS_PREFIX: + // Defer handling the above token events until the next call on the deserialize_scalar() function since the + // meaning depends on subsequent events. + if (found_props && line < lexer.get_lines_processed()) { + // If node properties and a followed node are on the different line, the properties belong to the root + // node. + if (m_needs_anchor_impl) { + m_root_anchor_name = std::move(m_anchor_name); + m_needs_anchor_impl = false; + m_anchor_name.clear(); + } + + if (m_needs_tag_impl) { + m_root_tag_name = std::move(m_tag_name); + m_needs_tag_impl = false; + m_tag_name.clear(); + } + } + break; + default: + // Do nothing since current document has no contents. + break; } mp_current_node = &root; @@ -6515,9 +6792,10 @@ class basic_deserializer { /// @brief Deserializes the YAML directives if specified. /// @param lexer The lexical analyzer to be used. - /// @param last_type The variable to store the last lexical token type. + /// @param last_token Storage for last lexical token type. void deserialize_directives(lexer_type& lexer, lexical_token& last_token) { bool lacks_end_of_directives_marker = false; + lexer.set_document_state(true); for (;;) { lexical_token token = lexer.get_next_token(); @@ -6597,6 +6875,7 @@ class basic_deserializer { } // end the parsing of directives if the other tokens are found. last_token = token; + lexer.set_document_state(false); return; } } @@ -6604,7 +6883,8 @@ class basic_deserializer { /// @brief Deserializes the YAML nodes recursively. /// @param lexer The lexical analyzer to be used. - /// @param first_type The first lexical token type. + /// @param first_type The first lexical token. + /// @param last_type Storage for last lexical token type. void deserialize_node(lexer_type& lexer, const lexical_token& first_token, lexical_token_t& last_type) { lexical_token token = first_token; uint32_t line = lexer.get_lines_processed(); @@ -6724,7 +7004,7 @@ class basic_deserializer { // foo: !!map // !!str 123: true // ^ - // this !!str tag overwrites the preceeding !!map tag. + // this !!str tag overwrites the preceding !!map tag. // ``` *mp_current_node = basic_node_type::mapping(); apply_directive_set(*mp_current_node); @@ -6735,7 +7015,7 @@ class basic_deserializer { } if (token.type == lexical_token_t::SEQUENCE_BLOCK_PREFIX) { - // a key separator preceeding block sequence entries + // a key separator preceding block sequence entries *mp_current_node = basic_node_type::sequence(); apply_directive_set(*mp_current_node); apply_node_properties(*mp_current_node); @@ -6808,11 +7088,6 @@ class basic_deserializer { continue; } - // just ignore directives - case lexical_token_t::YAML_VER_DIRECTIVE: - case lexical_token_t::TAG_DIRECTIVE: - case lexical_token_t::INVALID_DIRECTIVE: - break; case lexical_token_t::ANCHOR_PREFIX: case lexical_token_t::TAG_PREFIX: deserialize_node_properties(lexer, token, line, indent); @@ -6847,6 +7122,8 @@ class basic_deserializer { } case lexical_token_t::SEQUENCE_FLOW_BEGIN: if (m_flow_context_depth == 0) { + lexer.set_context_state(true); + uint32_t pop_num = 0; if (indent == 0) { pop_num = static_cast(m_context_stack.size() - 1); @@ -6870,7 +7147,7 @@ class basic_deserializer { }); bool is_indent_valid = (target_itr != m_context_stack.rend()); if FK_YAML_UNLIKELY (!is_indent_valid) { - throw parse_error("Detected invalid indentaion.", line, indent); + throw parse_error("Detected invalid indentation.", line, indent); } pop_num = static_cast(std::distance(m_context_stack.rbegin(), target_itr)); @@ -6884,7 +7161,7 @@ class basic_deserializer { } } else if FK_YAML_UNLIKELY (m_flow_token_state == flow_token_state_t::NEEDS_SEPARATOR_OR_SUFFIX) { - throw parse_error("Flow sequence begininng is found without separated with a comma.", line, indent); + throw parse_error("Flow sequence beginning is found without separated with a comma.", line, indent); } ++m_flow_context_depth; @@ -6922,7 +7199,10 @@ class basic_deserializer { if FK_YAML_UNLIKELY (m_flow_context_depth == 0) { throw parse_error("Flow sequence ending is found outside the flow context.", line, indent); } - --m_flow_context_depth; + + if (--m_flow_context_depth == 0) { + lexer.set_context_state(false); + } // find the corresponding flow sequence beginning. auto itr = std::find_if( // LCOV_EXCL_LINE @@ -6989,6 +7269,8 @@ class basic_deserializer { } case lexical_token_t::MAPPING_FLOW_BEGIN: if (m_flow_context_depth == 0) { + lexer.set_context_state(true); + uint32_t pop_num = 0; if (indent == 0) { pop_num = static_cast(m_context_stack.size() - 1); @@ -7012,7 +7294,7 @@ class basic_deserializer { }); bool is_indent_valid = (target_itr != m_context_stack.rend()); if FK_YAML_UNLIKELY (!is_indent_valid) { - throw parse_error("Detected invalid indentaion.", line, indent); + throw parse_error("Detected invalid indentation.", line, indent); } pop_num = static_cast(std::distance(m_context_stack.rbegin(), target_itr)); @@ -7026,7 +7308,7 @@ class basic_deserializer { } } else if FK_YAML_UNLIKELY (m_flow_token_state == flow_token_state_t::NEEDS_SEPARATOR_OR_SUFFIX) { - throw parse_error("Flow mapping begininng is found without separated with a comma.", line, indent); + throw parse_error("Flow mapping beginning is found without separated with a comma.", line, indent); } ++m_flow_context_depth; @@ -7067,7 +7349,10 @@ class basic_deserializer { if FK_YAML_UNLIKELY (m_flow_context_depth == 0) { throw parse_error("Flow mapping ending is found outside the flow context.", line, indent); } - --m_flow_context_depth; + + if (--m_flow_context_depth == 0) { + lexer.set_context_state(false); + } // find the corresponding flow mapping beginning. auto itr = std::find_if( // LCOV_EXCL_LINE @@ -7139,23 +7424,77 @@ class basic_deserializer { } m_flow_token_state = flow_token_state_t::NEEDS_VALUE_OR_SUFFIX; break; - case lexical_token_t::ALIAS_PREFIX: + case lexical_token_t::ALIAS_PREFIX: { + if FK_YAML_UNLIKELY (m_needs_tag_impl) { + throw parse_error("Tag cannot be specified to an alias node", line, indent); + } + + const std::string token_str = std::string(token.str.begin(), token.str.end()); + + uint32_t anchor_counts = static_cast(mp_meta->anchor_table.count(token_str)); + if FK_YAML_UNLIKELY (anchor_counts == 0) { + throw parse_error("The given anchor name must appear prior to the alias node.", line, indent); + } + + basic_node_type node {}; + node.m_attrs |= detail::node_attr_bits::alias_bit; + node.m_prop.anchor = std::move(token_str); + detail::node_attr_bits::set_anchor_offset(anchor_counts - 1, node.m_attrs); + + apply_directive_set(node); + apply_node_properties(node); + + bool should_continue = deserialize_scalar(lexer, std::move(node), indent, line, token); + if (should_continue) { + continue; + } + break; + } case lexical_token_t::PLAIN_SCALAR: case lexical_token_t::SINGLE_QUOTED_SCALAR: - case lexical_token_t::DOUBLE_QUOTED_SCALAR: - case lexical_token_t::BLOCK_SCALAR: { - bool do_continue = deserialize_scalar(lexer, indent, line, token); + case lexical_token_t::DOUBLE_QUOTED_SCALAR: { + tag_t tag_type {tag_t::NONE}; + if (m_needs_tag_impl) { + tag_type = tag_resolver_type::resolve_tag(m_tag_name, mp_meta); + } + + basic_node_type node = scalar_parser_type(line, indent).parse_flow(token.type, tag_type, token.str); + apply_directive_set(node); + apply_node_properties(node); + + bool do_continue = deserialize_scalar(lexer, std::move(node), indent, line, token); if (do_continue) { continue; } break; } + case lexical_token_t::BLOCK_LITERAL_SCALAR: + case lexical_token_t::BLOCK_FOLDED_SCALAR: { + tag_t tag_type {tag_t::NONE}; + if (m_needs_tag_impl) { + tag_type = tag_resolver_type::resolve_tag(m_tag_name, mp_meta); + } + + basic_node_type node = + scalar_parser_type(line, indent) + .parse_block(token.type, tag_type, token.str, lexer.get_block_scalar_header()); + apply_directive_set(node); + apply_node_properties(node); + + deserialize_scalar(lexer, std::move(node), indent, line, token); + continue; + } // these tokens end parsing the current YAML document. case lexical_token_t::END_OF_BUFFER: // This handles an empty input. case lexical_token_t::END_OF_DIRECTIVES: case lexical_token_t::END_OF_DOCUMENT: last_type = token.type; return; + // no way to come here while lexically analyzing document contents. + case lexical_token_t::YAML_VER_DIRECTIVE: // LCOV_EXCL_LINE + case lexical_token_t::TAG_DIRECTIVE: // LCOV_EXCL_LINE + case lexical_token_t::INVALID_DIRECTIVE: // LCOV_EXCL_LINE + break; // LCOV_EXCL_LINE } token = lexer.get_next_token(); @@ -7254,7 +7593,7 @@ class basic_deserializer { }); bool is_indent_valid = (target_itr != m_context_stack.rend()); if FK_YAML_UNLIKELY (!is_indent_valid) { - throw parse_error("Detected invalid indentaion.", line, indent); + throw parse_error("Detected invalid indentation.", line, indent); } pop_num = static_cast(std::distance(m_context_stack.rbegin(), target_itr)); @@ -7305,149 +7644,32 @@ class basic_deserializer { // a scalar node *mp_current_node = std::move(node_value); - if (m_flow_context_depth > 0 || m_context_stack.back().state != context_state_t::BLOCK_MAPPING_EXPLICIT_KEY) { - m_context_stack.pop_back(); - mp_current_node = m_context_stack.back().p_node; - - if (m_flow_context_depth > 0) { - m_flow_token_state = flow_token_state_t::NEEDS_SEPARATOR_OR_SUFFIX; - } - } - } - - /// @brief Creates a YAML scalar node with the retrieved token information by the lexer. - /// @param lexer The lexical analyzer to be used. - /// @param type The type of the last lexical token. - /// @param indent The last indent size. - /// @param line The last line. - /// @return The created YAML scalar node. - basic_node_type create_scalar_node(const lexical_token& token, uint32_t indent, uint32_t line) { - lexical_token_t type = token.type; - FK_YAML_ASSERT( - type == lexical_token_t::PLAIN_SCALAR || type == lexical_token_t::SINGLE_QUOTED_SCALAR || - type == lexical_token_t::DOUBLE_QUOTED_SCALAR || type == lexical_token_t::BLOCK_SCALAR || - type == lexical_token_t::ALIAS_PREFIX); - - node_type value_type {node_type::STRING}; - if (type == lexical_token_t::PLAIN_SCALAR) { - value_type = scalar_scanner::scan(token.str.begin(), token.str.end()); - } - - if (m_needs_tag_impl) { - if FK_YAML_UNLIKELY (type == lexical_token_t::ALIAS_PREFIX) { - throw parse_error("Tag cannot be specified to alias nodes", line, indent); - } - - tag_t tag_type = tag_resolver_type::resolve_tag(m_tag_name, mp_meta); - - FK_YAML_ASSERT(tag_type != tag_t::SEQUENCE && tag_type != tag_t::MAPPING); - - switch (tag_type) { - case tag_t::NULL_VALUE: - value_type = node_type::NULL_OBJECT; - break; - case tag_t::BOOLEAN: - value_type = node_type::BOOLEAN; - break; - case tag_t::INTEGER: - value_type = node_type::INTEGER; - break; - case tag_t::FLOATING_NUMBER: - value_type = node_type::FLOAT; - break; - case tag_t::STRING: - value_type = node_type::STRING; - break; - case tag_t::NON_SPECIFIC: - // scalars with the non-specific tag is resolved to a string tag. - // See the "Non-Specific Tags" section in https://yaml.org/spec/1.2.2/#691-node-tags. - value_type = node_type::STRING; - break; - case tag_t::CUSTOM_TAG: - default: - break; - } - } - - basic_node_type node {}; - - if (type == lexical_token_t::ALIAS_PREFIX) { - const std::string token_str = std::string(token.str.begin(), token.str.end()); - - uint32_t anchor_counts = static_cast(mp_meta->anchor_table.count(token_str)); - if FK_YAML_UNLIKELY (anchor_counts == 0) { - throw parse_error("The given anchor name must appear prior to the alias node.", line, indent); - } - - node.m_attrs |= detail::node_attr_bits::alias_bit; - node.m_prop.anchor = std::move(token_str); - detail::node_attr_bits::set_anchor_offset(anchor_counts - 1, node.m_attrs); - - apply_directive_set(node); - apply_node_properties(node); - - return node; - } + if FK_YAML_LIKELY (!m_context_stack.empty()) { + if (m_flow_context_depth > 0 || + m_context_stack.back().state != context_state_t::BLOCK_MAPPING_EXPLICIT_KEY) { + m_context_stack.pop_back(); + mp_current_node = m_context_stack.back().p_node; - switch (value_type) { - case node_type::NULL_OBJECT: { - std::nullptr_t null = nullptr; - bool converted = detail::aton(token.str.begin(), token.str.end(), null); - if FK_YAML_UNLIKELY (!converted) { - throw parse_error("Failed to convert a scalar to a null.", line, indent); - } - // The above `node` variable is already null, so no instance creation is needed. - break; - } - case node_type::BOOLEAN: { - boolean_type boolean = static_cast(false); - bool converted = detail::atob(token.str.begin(), token.str.end(), boolean); - if FK_YAML_UNLIKELY (!converted) { - throw parse_error("Failed to convert a scalar to a boolean.", line, indent); - } - node = basic_node_type(boolean); - break; - } - case node_type::INTEGER: { - integer_type integer = 0; - bool converted = detail::atoi(token.str.begin(), token.str.end(), integer); - if FK_YAML_UNLIKELY (!converted) { - throw parse_error("Failed to convert a scalar to an integer.", line, indent); - } - node = basic_node_type(integer); - break; - } - case node_type::FLOAT: { - float_number_type float_val = 0; - bool converted = detail::atof(token.str.begin(), token.str.end(), float_val); - if FK_YAML_UNLIKELY (!converted) { - throw parse_error("Failed to convert a scalar to a floating point value", line, indent); + if (m_flow_context_depth > 0) { + m_flow_token_state = flow_token_state_t::NEEDS_SEPARATOR_OR_SUFFIX; + } } - node = basic_node_type(float_val); - break; } - case node_type::STRING: - node = basic_node_type(std::string(token.str.begin(), token.str.end())); - break; - default: // LCOV_EXCL_LINE - break; // LCOV_EXCL_LINE + else { + // single scalar document. + return; } - - apply_directive_set(node); - apply_node_properties(node); - - return node; } /// @brief Deserialize a detected scalar node. /// @param lexer The lexical analyzer to be used. - /// @param node A detected scalar node by a lexer. + /// @param node A scalar node. /// @param indent The current indentation width. Can be updated in this function. /// @param line The number of processed lines. Can be updated in this function. + /// @param token The storage for last lexical token. /// @return true if next token has already been got, false otherwise. - bool deserialize_scalar(lexer_type& lexer, uint32_t& indent, uint32_t& line, lexical_token& token) { - basic_node_type node = create_scalar_node(token, indent, line); - + bool deserialize_scalar( + lexer_type& lexer, basic_node_type&& node, uint32_t& indent, uint32_t& line, lexical_token& token) { if (mp_current_node->is_mapping()) { add_new_key(std::move(node), line, indent); return false; @@ -7474,24 +7696,43 @@ class basic_deserializer { } if (mp_current_node->is_scalar()) { - parse_context& cur_context = m_context_stack.back(); - switch (cur_context.state) { - case context_state_t::BLOCK_MAPPING_EXPLICIT_KEY: - case context_state_t::BLOCK_MAPPING_EXPLICIT_VALUE: - m_context_stack.emplace_back(line, indent, context_state_t::BLOCK_MAPPING, mp_current_node); - break; - default: - if FK_YAML_UNLIKELY (cur_context.line == line) { - throw parse_error("Multiple mapping keys are specified on the same line.", line, indent); + if FK_YAML_LIKELY (!m_context_stack.empty()) { + parse_context& cur_context = m_context_stack.back(); + switch (cur_context.state) { + case context_state_t::BLOCK_MAPPING_EXPLICIT_KEY: + case context_state_t::BLOCK_MAPPING_EXPLICIT_VALUE: + m_context_stack.emplace_back(line, indent, context_state_t::BLOCK_MAPPING, mp_current_node); + break; + default: + if FK_YAML_UNLIKELY (cur_context.line == line) { + throw parse_error("Multiple mapping keys are specified on the same line.", line, indent); + } + cur_context.line = line; + cur_context.indent = indent; + cur_context.state = context_state_t::BLOCK_MAPPING; + break; } - cur_context.line = line; - cur_context.indent = indent; - cur_context.state = context_state_t::BLOCK_MAPPING; - break; + + *mp_current_node = basic_node_type::mapping(); + apply_directive_set(*mp_current_node); } + else { + // root mapping node - *mp_current_node = basic_node_type::mapping(); - apply_directive_set(*mp_current_node); + m_context_stack.emplace_back(line, indent, context_state_t::BLOCK_MAPPING, mp_current_node); + *mp_current_node = basic_node_type::mapping(); + apply_directive_set(*mp_current_node); + + // apply node properties if any to the root mapping node. + if (!m_root_anchor_name.empty()) { + mp_current_node->add_anchor_name(std::move(m_root_anchor_name)); + m_root_anchor_name.clear(); + } + if (!m_root_tag_name.empty()) { + mp_current_node->add_tag_name(std::move(m_root_tag_name)); + m_root_tag_name.clear(); + } + } } add_new_key(std::move(node), line, indent); } @@ -7550,25 +7791,27 @@ class basic_deserializer { std::string m_anchor_name {}; /// The last tag name. std::string m_tag_name {}; + /// The root YAML anchor name. (maybe empty and unused) + std::string m_root_anchor_name {}; + /// The root tag name. (maybe empty and unused) + std::string m_root_tag_name {}; }; FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_INPUT_DESERIALIZER_HPP_ */ +#endif /* FK_YAML_DETAIL_INPUT_DESERIALIZER_HPP */ // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_INPUT_INPUT_ADAPTER_HPP_ -#define FK_YAML_DETAIL_INPUT_INPUT_ADAPTER_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_INPUT_INPUT_ADAPTER_HPP +#define FK_YAML_DETAIL_INPUT_INPUT_ADAPTER_HPP #include #include @@ -7582,18 +7825,16 @@ FK_YAML_DETAIL_NAMESPACE_END // #include // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_DETECTOR_HPP_ -#define FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_DETECTOR_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_DETECTOR_HPP +#define FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_DETECTOR_HPP #include #include @@ -7601,18 +7842,16 @@ FK_YAML_DETAIL_NAMESPACE_END // #include // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_T_HPP_ -#define FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_T_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_T_HPP +#define FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_T_HPP // #include @@ -7631,7 +7870,7 @@ enum class utf_encode_t { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_T_HPP_ */ +#endif /* FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_T_HPP */ // #include @@ -7645,7 +7884,7 @@ FK_YAML_DETAIL_NAMESPACE_BEGIN /// @brief Detect an encoding type for UTF-8 expected inputs. /// @note This function doesn't support the case where the first character is null. /// @param[in] bytes 4 bytes of an input character sequence. -/// @param[out] has_bom Whether or not the input contains a BOM. +/// @param[out] has_bom Whether the input contains a BOM. /// @return A detected encoding type. inline utf_encode_t detect_encoding_type(const std::array& bytes, bool& has_bom) noexcept { has_bom = false; @@ -7954,7 +8193,7 @@ struct stream_utf_encode_detector { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_DETECTOR_HPP_ */ +#endif /* FK_YAML_DETAIL_ENCODINGS_UTF_ENCODE_DETECTOR_HPP */ // #include @@ -7987,7 +8226,7 @@ class iterator_input_adapter create_iterator_input_adapter( } // anonymous namespace -/// @brief A factory method for iterator_input_adapter objects with ieterator values. +/// @brief A factory method for iterator_input_adapter objects with iterator values. /// @tparam ItrType An iterator type. /// @param begin The beginning of iterators. /// @param end The end of iterators. @@ -8928,7 +9167,7 @@ struct container_input_adapter_factory {}; template struct container_input_adapter_factory< ContainerType, void_t()), end(std::declval()))>> { - /// Whether or not ContainerType is a contiguous container. + /// Whether ContainerType is a contiguous container. static constexpr bool is_contiguous = is_contiguous_container::value; /// A type for resulting input adapter object. @@ -8979,21 +9218,19 @@ inline stream_input_adapter input_adapter(std::istream& stream) { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_INPUT_INPUT_ADAPTER_HPP_ */ +#endif /* FK_YAML_DETAIL_INPUT_INPUT_ADAPTER_HPP */ // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_ITERATOR_HPP_ -#define FK_YAML_DETAIL_ITERATOR_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_ITERATOR_HPP +#define FK_YAML_DETAIL_ITERATOR_HPP #include #include @@ -9013,7 +9250,7 @@ struct sequence_iterator_tag {}; /// @brief A tag which tells Iterator will contain mapping value iterator. struct mapping_iterator_tag {}; -/// @brief The template definitions of type informations used in @ref Iterator class +/// @brief The template definitions of type information used in @ref Iterator class /// @tparam ValueType The type of iterated elements. template struct iterator_traits { @@ -9235,7 +9472,7 @@ class iterator { return *this; } - /// @brief A post-increment opretor of the iterator class. + /// @brief A post-increment operator of the iterator class. /// @return iterator An iterator object which has been incremented. iterator operator++(int) & noexcept { auto result = *this; @@ -9378,7 +9615,7 @@ class iterator { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_ITERATOR_HPP_ */ +#endif /* FK_YAML_DETAIL_ITERATOR_HPP */ // #include @@ -9391,18 +9628,16 @@ FK_YAML_DETAIL_NAMESPACE_END // #include // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_NODE_REF_STORAGE_HPP_ -#define FK_YAML_DETAIL_NODE_REF_STORAGE_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_NODE_REF_STORAGE_HPP +#define FK_YAML_DETAIL_NODE_REF_STORAGE_HPP #include #include @@ -9481,21 +9716,19 @@ class node_ref_storage { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_NODE_REF_STORAGE_HPP_ */ +#endif /* FK_YAML_DETAIL_NODE_REF_STORAGE_HPP */ // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_OUTPUT_SERIALIZER_HPP_ -#define FK_YAML_DETAIL_OUTPUT_SERIALIZER_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_OUTPUT_SERIALIZER_HPP +#define FK_YAML_DETAIL_OUTPUT_SERIALIZER_HPP #include #include @@ -9505,18 +9738,16 @@ FK_YAML_DETAIL_NAMESPACE_END // #include // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef TO__string_HPP_ -#define TO__string_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_CONVERSIONS_TO_STRING_HPP +#define FK_YAML_DETAIL_CONVERSIONS_TO_STRING_HPP #include #include @@ -9590,11 +9821,18 @@ inline enable_if_t::value> to_string(FloatType std::ostringstream oss; oss << f; s = oss.str(); + + // If `f` is actually an integer, ".0" must be appended. The result would cause roundtrip issue otherwise. + // https://github.com/fktn-k/fkYAML/issues/405 + FloatType diff = f - std::floor(f); + if (diff < std::numeric_limits::min()) { + s += ".0"; + } } FK_YAML_DETAIL_NAMESPACE_END -#endif /* TO__string_HPP_ */ +#endif /* FK_YAML_DETAIL_CONVERSIONS_TO_STRING_HPP */ // #include @@ -9664,7 +9902,7 @@ class basic_serializer { } /// @brief Serialize the directives if any is applied to the node. - /// @param node The targe node. + /// @param node The target node. /// @param str A string to hold serialization result. /// @return bool true if any directive is serialized, false otherwise. bool serialize_directives(const BasicNodeType& node, std::string& str) { @@ -9875,7 +10113,7 @@ class basic_serializer { /// @brief Append an anchor property if it's available. Do nothing otherwise. /// @param node The target node which is possibly an anchor node. - /// @param prepends_space Whether or not to prepend a space before an anchor property. + /// @param prepends_space Whether to prepend a space before an anchor property. /// @param str A string to hold serialization result. /// @return true if an anchor property has been appended, false otherwise. bool try_append_anchor(const BasicNodeType& node, bool prepends_space, std::string& str) const { @@ -9891,7 +10129,7 @@ class basic_serializer { /// @brief Append an alias property if it's available. Do nothing otherwise. /// @param node The target node which is possibly an alias node. - /// @param prepends_space Whether or not to prepend a space before an alias property. + /// @param prepends_space Whether to prepend a space before an alias property. /// @param str A string to hold serialization result. /// @return true if an alias property has been appended, false otherwise. bool try_append_alias(const BasicNodeType& node, bool prepends_space, std::string& str) const { @@ -9922,7 +10160,7 @@ class basic_serializer { /// @brief Get a string value from the given node and, if necessary, escape its contents. /// @param[in] node The target string YAML node. - /// @param[out] is_escaped Whether or not the contents of an ouput string has been escaped. + /// @param[out] is_escaped Whether the contents of an output string has been escaped. /// @return The (escaped) string node value. typename BasicNodeType::string_type get_string_node_value(const BasicNodeType& node, bool& is_escaped) { FK_YAML_ASSERT(node.is_string()); @@ -9939,23 +10177,21 @@ class basic_serializer { FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_OUTPUT_SERIALIZER_HPP_ */ +#endif /* FK_YAML_DETAIL_OUTPUT_SERIALIZER_HPP */ // #include // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_TYPES_YAML_VERSION_T_HPP_ -#define FK_YAML_DETAIL_TYPES_YAML_VERSION_T_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_TYPES_YAML_VERSION_T_HPP +#define FK_YAML_DETAIL_TYPES_YAML_VERSION_T_HPP #include @@ -9996,44 +10232,41 @@ inline yaml_version_type convert_to_yaml_version_type(yaml_version_t t) noexcept FK_YAML_DETAIL_NAMESPACE_END -#endif /* FK_YAML_DETAIL_TYPES_YAML_VERSION_T_HPP_ */ +#endif /* FK_YAML_DETAIL_TYPES_YAML_VERSION_T_HPP */ // #include // #include // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_NODE_VALUE_CONVERTER_HPP_ -#define FK_YAML_NODE_VALUE_CONVERTER_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_NODE_VALUE_CONVERTER_HPP +#define FK_YAML_NODE_VALUE_CONVERTER_HPP #include // #include // #include -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_CONVERSIONS_FROM_NODE_HPP_ -#define FK_YAML_DETAIL_CONVERSIONS_FROM_NODE_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_CONVERSIONS_FROM_NODE_HPP +#define FK_YAML_DETAIL_CONVERSIONS_FROM_NODE_HPP +#include #include #include #include @@ -10226,7 +10459,27 @@ inline void from_node(const BasicNodeType& n, FloatType& f) { throw type_error("The target node value type is not float number type.", n.get_type()); } - auto tmp_float = n.template get_value_ref(); + using node_float_type = typename BasicNodeType::float_number_type; + auto tmp_float = n.template get_value_ref(); + + // check if the value is an infinite number (either positive or negative) + if (std::isinf(tmp_float)) { + if (tmp_float == std::numeric_limits::infinity()) { + f = std::numeric_limits::infinity(); + return; + } + + f = -1 * std::numeric_limits::infinity(); + return; + } + + // check if the value is not a number + if (std::isnan(tmp_float)) { + f = std::numeric_limits::quiet_NaN(); + return; + } + + // check if the value is expressible as FloatType. if FK_YAML_UNLIKELY (tmp_float < std::numeric_limits::lowest()) { throw exception("Floating point value underflow detected."); } @@ -10298,7 +10551,7 @@ namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-n { #endif -/// @brief A blobal object to represent ADL friendly from_node functor. +/// @brief A global object to represent ADL friendly from_node functor. // NOLINTNEXTLINE(misc-definitions-in-headers) FK_YAML_INLINE_VAR constexpr const auto& from_node = detail::static_const::value; @@ -10308,21 +10561,19 @@ FK_YAML_INLINE_VAR constexpr const auto& from_node = detail::static_const -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_DETAIL_CONVERSIONS_TO_NODE_HPP_ -#define FK_YAML_DETAIL_CONVERSIONS_TO_NODE_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_CONVERSIONS_TO_NODE_HPP +#define FK_YAML_DETAIL_CONVERSIONS_TO_NODE_HPP #include @@ -10346,11 +10597,11 @@ FK_YAML_DETAIL_NAMESPACE_BEGIN /////////////////////////////////// /// @brief The external constructor template for basic_node objects. -/// @note All the non-specialized instanciations results in compilation error since such instantiations are not +/// @note All the non-specialized instantiations results in compilation error since such instantiations are not /// supported. /// @warning All the specialization must call n.m_node_value.destroy() first in the construct function to avoid /// memory leak. -/// @tparam node_type The resulting YAMK node value type. +/// @tparam node_type The resulting YAML node value type. template struct external_node_constructor; @@ -10534,7 +10785,7 @@ inline void to_node(BasicNodeType& n, T&& s) noexcept { } /// @brief to_node function for BasicNodeType::mapping_type objects. -/// @tparam BasicNodeType A basid_node template instance type. +/// @tparam BasicNodeType A basic_node template instance type. /// @tparam T A mapping node value type. /// @param n A basic_node object. /// @param m A mapping node value object. @@ -10648,7 +10899,7 @@ namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-n { #endif -/// @brief A blobal object to represent ADL friendly to_node functor. +/// @brief A global object to represent ADL friendly to_node functor. // NOLINTNEXTLINE(misc-definitions-in-headers) FK_YAML_INLINE_VAR constexpr const auto& to_node = detail::static_const::value; @@ -10658,7 +10909,7 @@ FK_YAML_INLINE_VAR constexpr const auto& to_node = detail::static_const -/// _______ __ __ __ _____ __ __ __ -/// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library -/// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 -/// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML -/// -/// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani -/// SPDX-License-Identifier: MIT -/// -/// @file - -#ifndef FK_YAML_ORDERED_MAP_HPP_ -#define FK_YAML_ORDERED_MAP_HPP_ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_ORDERED_MAP_HPP +#define FK_YAML_ORDERED_MAP_HPP #include #include @@ -10879,7 +11128,7 @@ class ordered_map : public std::vector, Allocator> { FK_YAML_NAMESPACE_END -#endif /* FK_YAML_ORDERED_MAP_HPP_ */ +#endif /* FK_YAML_ORDERED_MAP_HPP */ FK_YAML_NAMESPACE_BEGIN @@ -10959,7 +11208,7 @@ class basic_node { using initializer_list_t = std::initializer_list>; /// @brief The actual storage for a YAML node value of the @ref basic_node class. - /// @details This union combines the different sotrage types for the YAML value types defined in @ref node_t. + /// @details This union combines the different storage types for the YAML value types defined in @ref node_t. /// @note Container types are stored as pointers so that the size of this union will not exceed 64 bits by /// default. union node_value { @@ -11618,7 +11867,7 @@ class basic_node { ret = (*(p_this_value->p_mapping) < *(p_other_value->p_mapping)); break; case detail::node_attr_bits::null_bit: // LCOV_EXCL_LINE - // Will not come here since null nodes are alyways the same. + // Will not come here since null nodes are always the same. break; // LCOV_EXCL_LINE case detail::node_attr_bits::bool_bit: // false < true @@ -11798,7 +12047,7 @@ class basic_node { } } - /// @brief Check whether or not this basic_node object has a given key in its inner mapping node value. + /// @brief Check whether this basic_node object has a given key in its inner mapping node value. /// @tparam KeyType A key type compatible with basic_node. /// @param key A key to the target value in the mapping node value. /// @return true if the target node is a mapping and has the given key, false otherwise. @@ -11822,7 +12071,7 @@ class basic_node { return false; } - /// @brief Check whether or not this basic_node object has a given key in its inner mapping Node value. + /// @brief Check whether this basic_node object has a given key in its inner mapping Node value. /// @tparam KeyType A key type which is a kind of basic_node template class. /// @param[in] key A key to the target value in the YAML mapping node value. /// @return true if the YAML node is a mapping and has the given key, false otherwise. @@ -12037,7 +12286,7 @@ class basic_node { set_yaml_version_type(detail::convert_to_yaml_version_type(version)); } - /// @brief Check whether or not this basic_node object has already had any anchor name. + /// @brief Check whether this basic_node object has already had any anchor name. /// @return true if ths basic_node has an anchor name, false otherwise. /// @sa https://fktn-k.github.io/fkYAML/api/basic_node/has_anchor_name/ bool has_anchor_name() const noexcept { @@ -12112,7 +12361,7 @@ class basic_node { m_prop.anchor = std::move(anchor_name); } - /// @brief Check whether or not this basic_node object has already had any tag name. + /// @brief Check whether this basic_node object has already had any tag name. /// @return true if ths basic_node has a tag name, false otherwise. /// @sa https://fktn-k.github.io/fkYAML/api/basic_node/has_tag_name/ bool has_tag_name() const noexcept { @@ -12561,4 +12810,4 @@ inline fkyaml::node operator"" _yaml(const char8_t* s, std::size_t n) { FK_YAML_NAMESPACE_END -#endif /* FK_YAML_NODE_HPP_ */ +#endif /* FK_YAML_NODE_HPP */ diff --git a/test/cmake_add_subdirectory_test/project/main.cpp b/test/cmake_add_subdirectory_test/project/main.cpp index 137bcac8..9a8fa4ef 100644 --- a/test/cmake_add_subdirectory_test/project/main.cpp +++ b/test/cmake_add_subdirectory_test/project/main.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/cmake_fetch_content_test/project/CMakeLists.txt b/test/cmake_fetch_content_test/project/CMakeLists.txt index ab338859..86eecd8d 100644 --- a/test/cmake_fetch_content_test/project/CMakeLists.txt +++ b/test/cmake_fetch_content_test/project/CMakeLists.txt @@ -6,7 +6,7 @@ include(FetchContent) FetchContent_Declare( fkYAML GIT_REPOSITORY https://github.com/fktn-k/fkYAML.git - GIT_TAG v0.3.12) + GIT_TAG v0.3.13) FetchContent_MakeAvailable(fkYAML) add_executable( diff --git a/test/cmake_fetch_content_test/project/main.cpp b/test/cmake_fetch_content_test/project/main.cpp index 137bcac8..9a8fa4ef 100644 --- a/test/cmake_fetch_content_test/project/main.cpp +++ b/test/cmake_fetch_content_test/project/main.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/cmake_find_package_test/project/main.cpp b/test/cmake_find_package_test/project/main.cpp index 137bcac8..9a8fa4ef 100644 --- a/test/cmake_find_package_test/project/main.cpp +++ b/test/cmake_find_package_test/project/main.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/cmake_target_include_directories_test/project/main.cpp b/test/cmake_target_include_directories_test/project/main.cpp index 137bcac8..9a8fa4ef 100644 --- a/test/cmake_target_include_directories_test/project/main.cpp +++ b/test/cmake_target_include_directories_test/project/main.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/CMakeLists.txt b/test/unit_test/CMakeLists.txt index 40162f3c..a887ae5a 100644 --- a/test/unit_test/CMakeLists.txt +++ b/test/unit_test/CMakeLists.txt @@ -230,6 +230,7 @@ add_executable( test_ordered_map_class.cpp test_position_tracker_class.cpp test_scalar_conv.cpp + test_scalar_parser_class.cpp test_scalar_scanner_class.cpp test_serializer_class.cpp test_str_view_class.cpp diff --git a/test/unit_test/main.cpp b/test/unit_test/main.cpp index 4a3f79ab..2f113837 100644 --- a/test/unit_test/main.cpp +++ b/test/unit_test/main.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_custom_from_node.cpp b/test/unit_test/test_custom_from_node.cpp index 9af98dc8..fed40fcd 100644 --- a/test/unit_test/test_custom_from_node.cpp +++ b/test/unit_test/test_custom_from_node.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_deserializer_class.cpp b/test/unit_test/test_deserializer_class.cpp index 68193861..feae3b4a 100644 --- a/test/unit_test/test_deserializer_class.cpp +++ b/test/unit_test/test_deserializer_class.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani @@ -15,8 +15,7 @@ TEST_CASE("Deserializer_EmptyInput") { fkyaml::node root; REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter(" "))); - REQUIRE(root.is_mapping()); - REQUIRE(root.empty()); + REQUIRE(root.is_null()); } TEST_CASE("Deserializer_KeySeparator") { @@ -98,6 +97,12 @@ TEST_CASE("Deserializer_BooleanValue") { REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter("test:\n - False"))); REQUIRE(root["test"][0].get_value() == false); } + + SECTION("root scalar") { + REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter("true"))); + REQUIRE(root.is_boolean()); + REQUIRE(root.get_value() == true); + } } TEST_CASE("Deserializer_IntegerKey") { @@ -124,6 +129,12 @@ TEST_CASE("Deserializer_IntegerKey") { REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter("test:\n - 123"))); REQUIRE(root["test"][0].get_value() == 123); } + + SECTION("root scalar") { + REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter("123"))); + REQUIRE(root.is_integer()); + REQUIRE(root.get_value() == 123); + } } TEST_CASE("Deserializer_FloatingPointNumberKey") { @@ -150,6 +161,146 @@ TEST_CASE("Deserializer_FloatingPointNumberKey") { REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter("test:\n - 1.23e-5"))); REQUIRE(root["test"][0].get_value() == 1.23e-5); } + + SECTION("root scalar") { + REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter("3.14"))); + REQUIRE(root.is_float_number()); + REQUIRE(root.get_value() == 3.14); + } +} + +TEST_CASE("Deserializer_BlockLiteralScalar") { + fkyaml::detail::basic_deserializer deserializer; + fkyaml::node root; + + SECTION("not tagged") { + std::string input = "foo: |\n" + " first sentence.\n" + " second sentence.\n" + " last sentence.\n"; + + REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter(input))); + REQUIRE(root.is_mapping()); + REQUIRE(root.size() == 1); + REQUIRE(root.contains("foo")); + + fkyaml::node& foo_node = root["foo"]; + REQUIRE(foo_node.is_string()); + REQUIRE(foo_node.get_value_ref() == "first sentence.\nsecond sentence.\nlast sentence.\n"); + } + + SECTION("tagged") { + std::string input = "foo: !!str |\n" + " first sentence.\n" + " second sentence.\n" + " last sentence.\n"; + + REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter(input))); + REQUIRE(root.is_mapping()); + REQUIRE(root.size() == 1); + REQUIRE(root.contains("foo")); + + fkyaml::node& foo_node = root["foo"]; + REQUIRE(foo_node.has_tag_name()); + REQUIRE(foo_node.get_tag_name() == "!!str"); + REQUIRE(foo_node.is_string()); + REQUIRE(foo_node.get_value_ref() == "first sentence.\nsecond sentence.\nlast sentence.\n"); + } + + SECTION("mapping key") { + std::string input = "? |\n" + " first sentence.\n" + " second sentence.\n" + " last sentence.\n" + ": map value"; + + REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter(input))); + REQUIRE(root.is_mapping()); + REQUIRE(root.size() == 1); + REQUIRE(root.contains("first sentence.\nsecond sentence.\nlast sentence.\n")); + + fkyaml::node& val_node = root["first sentence.\nsecond sentence.\nlast sentence.\n"]; + REQUIRE(val_node.is_string()); + REQUIRE(val_node.get_value_ref() == "map value"); + } + + SECTION("root scalar") { + std::string input = "--- |\n" + " first sentence.\n" + " second sentence.\n" + " last sentence.\n"; + + REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter(input))); + REQUIRE(root.is_string()); + REQUIRE(root.get_value_ref() == "first sentence.\nsecond sentence.\nlast sentence.\n"); + } +} + +TEST_CASE("Deserializer_BlockFoldedScalar") { + fkyaml::detail::basic_deserializer deserializer; + fkyaml::node root; + + SECTION("not tagged") { + std::string input = "foo: >\n" + " first sentence.\n" + " second sentence.\n" + " last sentence.\n"; + + REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter(input))); + REQUIRE(root.is_mapping()); + REQUIRE(root.size() == 1); + REQUIRE(root.contains("foo")); + + fkyaml::node& foo_node = root["foo"]; + REQUIRE(foo_node.is_string()); + REQUIRE(foo_node.get_value_ref() == "first sentence. second sentence. last sentence.\n"); + } + + SECTION("tagged") { + std::string input = "foo: !!str >\n" + " first sentence.\n" + " second sentence.\n" + " last sentence.\n"; + + REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter(input))); + REQUIRE(root.is_mapping()); + REQUIRE(root.size() == 1); + REQUIRE(root.contains("foo")); + + fkyaml::node& foo_node = root["foo"]; + REQUIRE(foo_node.has_tag_name()); + REQUIRE(foo_node.get_tag_name() == "!!str"); + REQUIRE(foo_node.is_string()); + REQUIRE(foo_node.get_value_ref() == "first sentence. second sentence. last sentence.\n"); + } + + SECTION("mapping key") { + std::string input = "? >\n" + " first sentence.\n" + " second sentence.\n" + " last sentence.\n" + ": map value"; + + REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter(input))); + REQUIRE(root.is_mapping()); + REQUIRE(root.size() == 1); + REQUIRE(root.contains("first sentence. second sentence. last sentence.\n")); + + fkyaml::node& val_node = root["first sentence. second sentence. last sentence.\n"]; + REQUIRE(val_node.is_string()); + REQUIRE(val_node.get_value_ref() == "map value"); + } + + SECTION("root scalar") { + std::string input = "--- >\n" + " first sentence.\n" + " second sentence.\n" + " last sentence.\n"; + + REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter(input))); + REQUIRE(root.is_string()); + REQUIRE(root.get_value_ref() == "first sentence. second sentence. last sentence.\n"); + } } TEST_CASE("Deserializer_ScalarConversionErrorHandling") { @@ -1942,20 +2093,25 @@ TEST_CASE("Deserializer_YAMLVerDirective") { REQUIRE(foo_node.get_value_ref() == "one"); } - SECTION("YAML directive in the content to be ignored") { + SECTION("YAML directive in the content is a valid scalar") { REQUIRE_NOTHROW( - root = deserializer.deserialize(fkyaml::detail::input_adapter("foo: bar\n%YAML 1.1\ntrue: 123"))); + root = deserializer.deserialize(fkyaml::detail::input_adapter("foo: bar\n%YAML 1.1: is valid\ntrue: 123"))); REQUIRE(root.get_yaml_version_type() == fkyaml::yaml_version_type::VERSION_1_2); REQUIRE(root.is_mapping()); - REQUIRE(root.size() == 2); + REQUIRE(root.size() == 3); REQUIRE(root.contains("foo")); + REQUIRE(root.contains("%YAML 1.1")); REQUIRE(root.contains(true)); fkyaml::node& foo_node = root["foo"]; REQUIRE(foo_node.is_string()); REQUIRE(foo_node.get_value_ref() == "bar"); + fkyaml::node& yaml11_node = root["%YAML 1.1"]; + REQUIRE(yaml11_node.is_string()); + REQUIRE(yaml11_node.get_value_ref() == "is valid"); + fkyaml::node& true_node = root[true]; REQUIRE(true_node.is_integer()); REQUIRE(true_node.get_value() == 123); @@ -2072,8 +2228,7 @@ TEST_CASE("Deserializer_InvalidDirective") { fkyaml::node root; REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter("%INVALID foo bar"))); - REQUIRE(root.is_mapping()); - REQUIRE(root.empty()); + REQUIRE(root.is_null()); } TEST_CASE("Deserializer_Anchor") { @@ -2285,8 +2440,10 @@ TEST_CASE("Deserializer_Anchor") { } SECTION("parse alias mapping key") { - REQUIRE_NOTHROW( - root = deserializer.deserialize(fkyaml::detail::input_adapter("&anchor foo:\n *anchor : 123"))); + std::string input = "&anchor foo:\n" + " bar: false\n" + " *anchor : 123"; + REQUIRE_NOTHROW(root = deserializer.deserialize(fkyaml::detail::input_adapter(input))); REQUIRE(root.is_mapping()); REQUIRE(root.size() == 1); @@ -2294,9 +2451,14 @@ TEST_CASE("Deserializer_Anchor") { fkyaml::node& foo_node = root["foo"]; REQUIRE(foo_node.is_mapping()); - REQUIRE(foo_node.size() == 1); + REQUIRE(foo_node.size() == 2); + REQUIRE(foo_node.contains("bar")); REQUIRE(foo_node.contains("foo")); + fkyaml::node& foo_bar_node = foo_node["bar"]; + REQUIRE(foo_bar_node.is_boolean()); + REQUIRE(foo_bar_node.get_value() == false); + fkyaml::node& foo_foo_node = foo_node["foo"]; REQUIRE(foo_foo_node.is_integer()); REQUIRE(foo_foo_node.get_value() == 123); diff --git a/test/unit_test/test_exception_class.cpp b/test/unit_test/test_exception_class.cpp index 9fadf672..dc19b49c 100644 --- a/test/unit_test/test_exception_class.cpp +++ b/test/unit_test/test_exception_class.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_input_adapter.cpp b/test/unit_test/test_input_adapter.cpp index 21b407e2..63b09992 100644 --- a/test/unit_test/test_input_adapter.cpp +++ b/test/unit_test/test_input_adapter.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_iterator_class.cpp b/test/unit_test/test_iterator_class.cpp index 8c27fb5a..b9e8705d 100644 --- a/test/unit_test/test_iterator_class.cpp +++ b/test/unit_test/test_iterator_class.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_lexical_analyzer_class.cpp b/test/unit_test/test_lexical_analyzer_class.cpp index 3dbd39ef..e75fcf9d 100644 --- a/test/unit_test/test_lexical_analyzer_class.cpp +++ b/test/unit_test/test_lexical_analyzer_class.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani @@ -26,6 +26,7 @@ TEST_CASE("LexicalAnalyzer_YamlVersionDirective") { value_pair_t("%YAML 1.2", "1.2")); fkyaml::detail::lexical_analyzer lexer(value_pair.first); + lexer.set_document_state(true); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::YAML_VER_DIRECTIVE); @@ -42,6 +43,8 @@ TEST_CASE("LexicalAnalyzer_YamlVersionDirective") { fkyaml::detail::str_view("%YAML1.2")); fkyaml::detail::lexical_analyzer lexer(buffer); + lexer.set_document_state(true); + REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::INVALID_DIRECTIVE); @@ -61,6 +64,7 @@ TEST_CASE("LexicalAnalyzer_YamlVersionDirective") { fkyaml::detail::str_view("%YAML AbC")); fkyaml::detail::lexical_analyzer lexer(buffer); + lexer.set_document_state(true); REQUIRE_THROWS_AS(lexer.get_next_token(), fkyaml::parse_error); } } @@ -71,6 +75,7 @@ TEST_CASE("LexicalAnalyzer_TagDirective") { SECTION("primary tag handle") { auto input = GENERATE(fkyaml::detail::str_view("%TAG ! foo"), fkyaml::detail::str_view("%TAG\t!\tfoo")); fkyaml::detail::lexical_analyzer lexer(input); + lexer.set_document_state(true); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::TAG_DIRECTIVE); @@ -83,6 +88,7 @@ TEST_CASE("LexicalAnalyzer_TagDirective") { SECTION("secondary tag handle") { auto input = GENERATE(fkyaml::detail::str_view("%TAG !! foo"), fkyaml::detail::str_view("%TAG\t!!\tfoo")); fkyaml::detail::lexical_analyzer lexer(input); + lexer.set_document_state(true); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::TAG_DIRECTIVE); @@ -96,6 +102,7 @@ TEST_CASE("LexicalAnalyzer_TagDirective") { auto input = GENERATE( fkyaml::detail::str_view("%TAG !va1id-ta9! foo"), fkyaml::detail::str_view("%TAG\t!va1id-ta9!\tfoo")); fkyaml::detail::lexical_analyzer lexer(input); + lexer.set_document_state(true); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::TAG_DIRECTIVE); @@ -110,6 +117,8 @@ TEST_CASE("LexicalAnalyzer_TagDirective") { fkyaml::detail::str_view("%TUB"), fkyaml::detail::str_view("%TAC"), fkyaml::detail::str_view("%TAGE")); fkyaml::detail::lexical_analyzer lexer(buffer); + lexer.set_document_state(true); + REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::INVALID_DIRECTIVE); REQUIRE_NOTHROW(token = lexer.get_next_token()); @@ -131,6 +140,7 @@ TEST_CASE("LexicalAnalyzer_TagDirective") { fkyaml::detail::str_view("%TAG !invalid")); fkyaml::detail::lexical_analyzer lexer(input); + lexer.set_document_state(true); REQUIRE_THROWS_AS(lexer.get_next_token(), fkyaml::parse_error); } @@ -144,6 +154,7 @@ TEST_CASE("LexicalAnalyzer_TagDirective") { fkyaml::detail::str_view("%TAG !valid! %prefix")); fkyaml::detail::lexical_analyzer lexer(input); + lexer.set_document_state(true); REQUIRE_THROWS_AS(lexer.get_next_token(), fkyaml::parse_error); } } @@ -152,6 +163,7 @@ TEST_CASE("LexicalAnalyzer_InvalidDirective") { auto buffer = GENERATE(fkyaml::detail::str_view("%TAG"), fkyaml::detail::str_view("%YAML")); fkyaml::detail::lexical_analyzer lexer(buffer); + lexer.set_document_state(true); REQUIRE_THROWS_AS(lexer.get_next_token(), fkyaml::parse_error); } @@ -164,6 +176,8 @@ TEST_CASE("LexicalAnalyzer_ReservedDirective") { fkyaml::detail::lexical_token token; fkyaml::detail::lexical_analyzer lexer(buffer); + lexer.set_document_state(true); + REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::INVALID_DIRECTIVE); @@ -173,12 +187,14 @@ TEST_CASE("LexicalAnalyzer_ReservedDirective") { TEST_CASE("LexicalAnalyzer_EmptyDirective") { fkyaml::detail::lexical_analyzer lexer("%"); + lexer.set_document_state(true); REQUIRE(lexer.get_next_token().type == fkyaml::detail::lexical_token_t::INVALID_DIRECTIVE); } TEST_CASE("LexicalAnalyzer_EndOfDirectives") { - fkyaml::detail::lexical_analyzer lexer("%YAML 1.2\n---\nfoo: bar"); fkyaml::detail::lexical_token token; + fkyaml::detail::lexical_analyzer lexer("%YAML 1.2\n---\nfoo: bar"); + lexer.set_document_state(true); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::YAML_VER_DIRECTIVE); @@ -186,6 +202,9 @@ TEST_CASE("LexicalAnalyzer_EndOfDirectives") { REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_DIRECTIVES); REQUIRE_NOTHROW(token = lexer.get_next_token()); + + lexer.set_document_state(false); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::PLAIN_SCALAR); REQUIRE(token.str == "foo"); REQUIRE_NOTHROW(token = lexer.get_next_token()); @@ -198,14 +217,18 @@ TEST_CASE("LexicalAnalyzer_EndOfDirectives") { } TEST_CASE("LexicalAnalyzer_EndOfDocuments") { - fkyaml::detail::lexical_analyzer lexer("%YAML 1.2\n---\n..."); fkyaml::detail::lexical_token token; + fkyaml::detail::lexical_analyzer lexer("%YAML 1.2\n---\n..."); + lexer.set_document_state(true); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::YAML_VER_DIRECTIVE); REQUIRE(lexer.get_yaml_version() == fkyaml::detail::str_view("1.2")); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_DIRECTIVES); + + lexer.set_document_state(false); + REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_DOCUMENT); REQUIRE_NOTHROW(token = lexer.get_next_token()); @@ -287,6 +310,7 @@ TEST_CASE("LexicalAnalyzer_Colon") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::MAPPING_FLOW_BEGIN); + lexer.set_context_state(true); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::KEY_SEPARATOR); } @@ -306,117 +330,121 @@ TEST_CASE("LexicalAnalzer_BlockSequenceEntryPrefix") { } TEST_CASE("LexicalAnalyzer_PlainScalar") { - using value_pair_t = std::pair; - auto value_pair = GENERATE( - value_pair_t("test", "test"), - value_pair_t("nop", "nop"), - value_pair_t("none", "none"), - value_pair_t("?test", "?test"), - value_pair_t(".NET", ".NET"), - value_pair_t(".on", ".on"), - value_pair_t(".n", ".n"), - value_pair_t("-t", "-t"), - value_pair_t("-foo", "-foo"), - value_pair_t("-.test", "-.test"), - value_pair_t("?", "?"), - value_pair_t("--foo", "--foo"), - value_pair_t("+123", "+123"), - value_pair_t("1.2.3", "1.2.3"), - value_pair_t("foo,bar", "foo,bar"), - value_pair_t("foo[bar", "foo[bar"), - value_pair_t("foo]bar", "foo]bar"), - value_pair_t("foo{bar", "foo{bar"), - value_pair_t("foo}bar", "foo}bar"), - value_pair_t("foo:bar", "foo:bar"), - value_pair_t("foo bar", "foo bar"), - value_pair_t("foo\"bar", "foo\"bar"), - value_pair_t("foo\'s bar", "foo\'s bar"), - value_pair_t("foo\\bar", "foo\\bar"), - value_pair_t("nullValue", "nullValue"), - value_pair_t("NullValue", "NullValue"), - value_pair_t("NULL_VALUE", "NULL_VALUE"), - value_pair_t("~Value", "~Value"), - value_pair_t("trueValue", "trueValue"), - value_pair_t("TrueValue", "TrueValue"), - value_pair_t("TRUE_VALUE", "TRUE_VALUE"), - value_pair_t("falseValue", "falseValue"), - value_pair_t("FalseValue", "FalseValue"), - value_pair_t("FALSE_VALUE", "FALSE_VALUE"), - value_pair_t(".infValue", ".infValue"), - value_pair_t(".InfValue", ".InfValue"), - value_pair_t(".INF_VALUE", ".INF_VALUE"), - value_pair_t("-.infValue", "-.infValue"), - value_pair_t("-.InfValue", "-.InfValue"), - value_pair_t("-.INF_VALUE", "-.INF_VALUE"), - value_pair_t(".nanValue", ".nanValue"), - value_pair_t(".NaNValue", ".NaNValue"), - value_pair_t(".NAN_VALUE", ".NAN_VALUE")); + auto input = GENERATE( + fkyaml::detail::str_view("test"), + fkyaml::detail::str_view("test "), + fkyaml::detail::str_view("test:"), + fkyaml::detail::str_view("nop"), + fkyaml::detail::str_view("none"), + fkyaml::detail::str_view("?test"), + fkyaml::detail::str_view(".NET"), + fkyaml::detail::str_view(".on"), + fkyaml::detail::str_view(".n"), + fkyaml::detail::str_view("-t"), + fkyaml::detail::str_view("-foo"), + fkyaml::detail::str_view("-.test"), + fkyaml::detail::str_view("?"), + fkyaml::detail::str_view("--foo"), + fkyaml::detail::str_view("+123"), + fkyaml::detail::str_view("1.2.3"), + fkyaml::detail::str_view("foo,bar"), + fkyaml::detail::str_view("foo[bar"), + fkyaml::detail::str_view("foo]bar"), + fkyaml::detail::str_view("foo{bar"), + fkyaml::detail::str_view("foo}bar"), + fkyaml::detail::str_view("foo:bar"), + fkyaml::detail::str_view("foo bar"), + fkyaml::detail::str_view("foo\"bar"), + fkyaml::detail::str_view("foo\'s bar"), + fkyaml::detail::str_view("foo\\bar"), + fkyaml::detail::str_view("nullValue"), + fkyaml::detail::str_view("NullValue"), + fkyaml::detail::str_view("NULL_VALUE"), + fkyaml::detail::str_view("~Value"), + fkyaml::detail::str_view("trueValue"), + fkyaml::detail::str_view("TrueValue"), + fkyaml::detail::str_view("TRUE_VALUE"), + fkyaml::detail::str_view("falseValue"), + fkyaml::detail::str_view("FalseValue"), + fkyaml::detail::str_view("FALSE_VALUE"), + fkyaml::detail::str_view(".infValue"), + fkyaml::detail::str_view(".InfValue"), + fkyaml::detail::str_view(".INF_VALUE"), + fkyaml::detail::str_view("-.infValue"), + fkyaml::detail::str_view("-.InfValue"), + fkyaml::detail::str_view("-.INF_VALUE"), + fkyaml::detail::str_view(".nanValue"), + fkyaml::detail::str_view(".NaNValue"), + fkyaml::detail::str_view(".NAN_VALUE")); - fkyaml::detail::lexical_analyzer lexer(value_pair.first); + fkyaml::detail::lexical_analyzer lexer(input); fkyaml::detail::lexical_token token; REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::PLAIN_SCALAR); - REQUIRE(token.str == value_pair.second); + REQUIRE(token.str.begin() == input.begin()); + REQUIRE(token.str.end() == input.begin() + input.find_last_not_of(' ') + 1); } TEST_CASE("LexicalAnalyzer_SingleQuotedScalar") { - using value_pair_t = std::pair; + using value_pair_t = std::pair; auto value_pair = GENERATE( - value_pair_t("\'\'", ""), - value_pair_t("\'foo\"bar\'", "foo\"bar"), - value_pair_t("\'foo bar\'", "foo bar"), - value_pair_t("\'foo\'\'bar\'", "foo\'bar"), - value_pair_t("\'foo\'\'bar\' ", "foo\'bar"), - value_pair_t("\'foo,bar\'", "foo,bar"), - value_pair_t("\'foo]bar\'", "foo]bar"), - value_pair_t("\'foo}bar\'", "foo}bar"), - value_pair_t("\'foo\"bar\'", "foo\"bar"), - value_pair_t("\'foo:bar\'", "foo:bar"), - value_pair_t("\'foo\\bar\'", "foo\\bar"), - - value_pair_t("\'foo\nbar\'", "foo bar"), - value_pair_t("\'foo \t\n \tbar\'", "foo bar"), - value_pair_t("\'foo\n\n \t\nbar\'", "foo\n\nbar"), - value_pair_t("\'\nfoo\n\n \t\nbar\'", " foo\n\nbar"), - value_pair_t("\'foo\nbar\n\'", "foo bar ")); + value_pair_t("\'\'", 1), + value_pair_t("\'foo\"bar\'", 1), + value_pair_t("\'foo bar\'", 1), + value_pair_t("\'foo\'\'bar\'", 1), + value_pair_t("\'foo\'\'bar\' ", 2), + value_pair_t("\'foo,bar\'", 1), + value_pair_t("\'foo]bar\'", 1), + value_pair_t("\'foo}bar\'", 1), + value_pair_t("\'foo\"bar\'", 1), + value_pair_t("\'foo:bar\'", 1), + value_pair_t("\'foo\\bar\'", 1), + + value_pair_t("\'foo\nbar\'", 1), + value_pair_t("\'foo \t\n \tbar\'", 1), + value_pair_t("\'foo\n\n \t\nbar\'", 1), + value_pair_t("\'\nfoo\n\n \t\nbar\'", 1), + value_pair_t("\'foo\nbar\n\'", 1)); fkyaml::detail::lexical_analyzer lexer(value_pair.first); fkyaml::detail::lexical_token token; REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::SINGLE_QUOTED_SCALAR); - REQUIRE(token.str == value_pair.second); + REQUIRE(token.str.begin() == value_pair.first.begin() + 1); + REQUIRE(token.str.end() == value_pair.first.end() - value_pair.second); } TEST_CASE("LexicalAnalyzer_DoubleQuotedScalar") { - using value_pair_t = std::pair; - auto value_pair = GENERATE( - value_pair_t("\"\"", ""), - value_pair_t("\"foo bar\"", "foo bar"), - value_pair_t("\"foo\tbar\"", "foo\tbar"), - value_pair_t("\"foo's bar\"", "foo's bar"), - value_pair_t("\"foo:bar\"", "foo:bar"), - value_pair_t("\"foo,bar\"", "foo,bar"), - value_pair_t("\"foo]bar\"", "foo]bar"), - value_pair_t("\"foo}bar\"", "foo}bar"), - value_pair_t("\"\\x30\\x2B\\x6d\"", "0+m"), - - value_pair_t("\"foo\nbar\"", "foo bar"), - value_pair_t("\"foo \t\n \tbar\"", "foo bar"), - value_pair_t("\"foo\n\n \t\nbar\"", "foo\n\nbar"), - value_pair_t("\"\nfoo\n\n \t\nbar\"", " foo\n\nbar"), - value_pair_t("\"foo\nbar\n\"", "foo bar "), - value_pair_t("\"foo\\\nbar\"", "foobar"), - value_pair_t("\"foo \t\\\nbar\"", "foo \tbar"), - value_pair_t("\"\\\n foo \t\\\n\tbar\t \t\\\n\"", "foo \tbar\t \t")); + auto input = GENERATE( + fkyaml::detail::str_view("\"\""), + fkyaml::detail::str_view("\"\\\"\""), + fkyaml::detail::str_view("\"foo bar\""), + fkyaml::detail::str_view("\"foo\tbar\""), + fkyaml::detail::str_view("\"foo's bar\""), + fkyaml::detail::str_view("\"foo:bar\""), + fkyaml::detail::str_view("\"foo,bar\""), + fkyaml::detail::str_view("\"foo]bar\""), + fkyaml::detail::str_view("\"foo}bar\""), + fkyaml::detail::str_view("\"\\x30\\x2B\\x6d\""), + + fkyaml::detail::str_view("\"foo\nbar\""), + fkyaml::detail::str_view("\"foo \t\n \tbar\""), + fkyaml::detail::str_view("\"foo\n\n \t\nbar\""), + fkyaml::detail::str_view("\"\nfoo\n\n \t\nbar\""), + fkyaml::detail::str_view("\"foo\nbar\n\""), + fkyaml::detail::str_view("\"foo\\\nbar\""), + fkyaml::detail::str_view("\"foo \t\\\nbar\""), + fkyaml::detail::str_view("\"\\\n foo \t\\\n\tbar\t \t\\\n\"")); - fkyaml::detail::lexical_analyzer lexer(value_pair.first); + fkyaml::detail::lexical_analyzer lexer(input); fkyaml::detail::lexical_token token; REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::DOUBLE_QUOTED_SCALAR); - REQUIRE(token.str == value_pair.second); + REQUIRE(token.str.begin() == input.begin() + 1); + REQUIRE(token.str.end() == input.end() - 1); } TEST_CASE("LexicalAnalyzer_MultiByteCharString") { @@ -477,89 +505,46 @@ TEST_CASE("LexicalAnalyzer_MultiByteCharString") { } TEST_CASE("LexicalAnalyzer_EscapedUnicodeCharacter") { - using value_pair_t = std::pair; - using char_traits_t = std::char_traits; - auto value_pair = GENERATE( - value_pair_t("\"\\x00\"", {char_traits_t::to_char_type(0x00)}), - value_pair_t("\"\\x40\"", {char_traits_t::to_char_type(0x40)}), - value_pair_t("\"\\x7F\"", {char_traits_t::to_char_type(0x7F)}), - value_pair_t("\"\\u0000\"", {char_traits_t::to_char_type(0x00)}), - value_pair_t("\"\\u0040\"", {char_traits_t::to_char_type(0x40)}), - value_pair_t("\"\\u007F\"", {char_traits_t::to_char_type(0x7F)}), - value_pair_t("\"\\u0080\"", {char_traits_t::to_char_type(0xC2), char_traits_t::to_char_type(0x80)}), - value_pair_t("\"\\u0400\"", {char_traits_t::to_char_type(0xD0), char_traits_t::to_char_type(0x80)}), - value_pair_t("\"\\u07FF\"", {char_traits_t::to_char_type(0xDF), char_traits_t::to_char_type(0xBF)}), - value_pair_t( - "\"\\u0800\"", - {char_traits_t::to_char_type(0xE0), char_traits_t::to_char_type(0xA0), char_traits_t::to_char_type(0x80)}), - value_pair_t( - "\"\\u8000\"", - {char_traits_t::to_char_type(0xE8), char_traits_t::to_char_type(0x80), char_traits_t::to_char_type(0x80)}), - value_pair_t( - "\"\\uFFFF\"", - {char_traits_t::to_char_type(0xEF), char_traits_t::to_char_type(0xBF), char_traits_t::to_char_type(0xBF)}), - value_pair_t("\"\\U00000000\"", {char_traits_t::to_char_type(0x00)}), - value_pair_t("\"\\U00000040\"", {char_traits_t::to_char_type(0x40)}), - value_pair_t("\"\\U0000007F\"", {char_traits_t::to_char_type(0x7F)}), - value_pair_t("\"\\U00000080\"", {char_traits_t::to_char_type(0xC2), char_traits_t::to_char_type(0x80)}), - value_pair_t("\"\\U00000400\"", {char_traits_t::to_char_type(0xD0), char_traits_t::to_char_type(0x80)}), - value_pair_t("\"\\U000007FF\"", {char_traits_t::to_char_type(0xDF), char_traits_t::to_char_type(0xBF)}), - value_pair_t( - "\"\\U00000800\"", - {char_traits_t::to_char_type(0xE0), char_traits_t::to_char_type(0xA0), char_traits_t::to_char_type(0x80)}), - value_pair_t( - "\"\\U00008000\"", - {char_traits_t::to_char_type(0xE8), char_traits_t::to_char_type(0x80), char_traits_t::to_char_type(0x80)}), - value_pair_t( - "\"\\U0000FFFF\"", - {char_traits_t::to_char_type(0xEF), char_traits_t::to_char_type(0xBF), char_traits_t::to_char_type(0xBF)}), - value_pair_t( - "\"\\U00010000\"", - {char_traits_t::to_char_type(0xF0), - char_traits_t::to_char_type(0x90), - char_traits_t::to_char_type(0x80), - char_traits_t::to_char_type(0x80)}), - value_pair_t( - "\"\\U00080000\"", - {char_traits_t::to_char_type(0xF2), - char_traits_t::to_char_type(0x80), - char_traits_t::to_char_type(0x80), - char_traits_t::to_char_type(0x80)}), - value_pair_t( - "\"\\U0010FFFF\"", - {char_traits_t::to_char_type(0xF4), - char_traits_t::to_char_type(0x8F), - char_traits_t::to_char_type(0xBF), - char_traits_t::to_char_type(0xBF)})); + auto input = GENERATE( + fkyaml::detail::str_view("\"\\x00\""), + fkyaml::detail::str_view("\"\\x40\""), + fkyaml::detail::str_view("\"\\x7F\""), + fkyaml::detail::str_view("\"\\u0000\""), + fkyaml::detail::str_view("\"\\u0040\""), + fkyaml::detail::str_view("\"\\u007F\""), + fkyaml::detail::str_view("\"\\u0080\""), + fkyaml::detail::str_view("\"\\u0400\""), + fkyaml::detail::str_view("\"\\u07FF\""), + fkyaml::detail::str_view("\"\\u0800\""), + fkyaml::detail::str_view("\"\\u8000\""), + fkyaml::detail::str_view("\"\\uFFFF\""), + fkyaml::detail::str_view("\"\\U00000000\""), + fkyaml::detail::str_view("\"\\U00000040\""), + fkyaml::detail::str_view("\"\\U0000007F\""), + fkyaml::detail::str_view("\"\\U00000080\""), + fkyaml::detail::str_view("\"\\U00000400\""), + fkyaml::detail::str_view("\"\\U000007FF\""), + fkyaml::detail::str_view("\"\\U00000800\""), + fkyaml::detail::str_view("\"\\U00008000\""), + fkyaml::detail::str_view("\"\\U0000FFFF\""), + fkyaml::detail::str_view("\"\\U00010000\""), + fkyaml::detail::str_view("\"\\U00080000\""), + fkyaml::detail::str_view("\"\\U0010FFFF\"")); - fkyaml::detail::lexical_analyzer lexer(value_pair.first); + fkyaml::detail::lexical_analyzer lexer(input); fkyaml::detail::lexical_token token; REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::DOUBLE_QUOTED_SCALAR); - REQUIRE(token.str == value_pair.second); + REQUIRE(token.str.begin() == input.begin() + 1); + REQUIRE(token.str.end() == input.end() - 1); } -TEST_CASE("LexicalAnalyzer_InvalidString") { - SECTION("parse error") { - auto buffer = GENERATE( - fkyaml::detail::str_view("\"test"), - fkyaml::detail::str_view("\'test"), - fkyaml::detail::str_view("\"\\xw\""), - fkyaml::detail::str_view("\"\\x+\""), - fkyaml::detail::str_view("\"\\x=\""), - fkyaml::detail::str_view("\"\\x^\""), - fkyaml::detail::str_view("\"\\x{\""), - fkyaml::detail::str_view("\"\\Q\"")); - - fkyaml::detail::lexical_analyzer lexer(buffer); - REQUIRE_THROWS_AS(lexer.get_next_token(), fkyaml::parse_error); - } +TEST_CASE("LexicalAnalyzer_UnclosedQuotedString") { + auto buffer = GENERATE(fkyaml::detail::str_view("\"test"), fkyaml::detail::str_view("\'test")); - SECTION("invalid encoding") { - fkyaml::detail::lexical_analyzer lexer("\"\\U00110000\""); - REQUIRE_THROWS_AS(lexer.get_next_token(), fkyaml::invalid_encoding); - } + fkyaml::detail::lexical_analyzer lexer(buffer); + REQUIRE_THROWS_AS(lexer.get_next_token(), fkyaml::parse_error); } TEST_CASE("LexicalAnalyzer_UnescapedControlCharacter") { @@ -595,8 +580,22 @@ TEST_CASE("LexicalAnalyzer_UnescapedControlCharacter") { std::string buffer("test"); buffer.push_back(unescaped_char); - fkyaml::detail::lexical_analyzer lexer(buffer); - REQUIRE_THROWS_AS(lexer.get_next_token(), fkyaml::parse_error); + SECTION("plain scalar") { + fkyaml::detail::lexical_analyzer lexer(buffer); + REQUIRE_THROWS_AS(lexer.get_next_token(), fkyaml::parse_error); + } + + SECTION("single quoted scalar") { + std::string single_quoted = "\'" + buffer + "\'"; + fkyaml::detail::lexical_analyzer lexer(single_quoted); + REQUIRE_THROWS_AS(lexer.get_next_token(), fkyaml::parse_error); + } + + SECTION("double quoted scalar") { + std::string double_quoted = "\"" + buffer + "\""; + fkyaml::detail::lexical_analyzer lexer(double_quoted); + REQUIRE_THROWS_AS(lexer.get_next_token(), fkyaml::parse_error); + } } TEST_CASE("LexicalAnalyzer_LiteralStringScalar") { @@ -608,8 +607,14 @@ TEST_CASE("LexicalAnalyzer_LiteralStringScalar") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == ""); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR); + REQUIRE(token.str.begin() == &input[3]); + REQUIRE(token.str.end() == &input[0] + 6); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::STRIP); + REQUIRE(lexer.get_block_scalar_header().indent == 3); // lexer returns content size if empty. + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("empty literal string scalar with clip chomping") { @@ -618,8 +623,14 @@ TEST_CASE("LexicalAnalyzer_LiteralStringScalar") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == ""); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR); + REQUIRE(token.str.begin() == &input[2]); + REQUIRE(token.str.end() == &input[0] + 5); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 3); // lexer returns content size if empty. + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("empty literal string scalar with keep chomping") { @@ -628,8 +639,14 @@ TEST_CASE("LexicalAnalyzer_LiteralStringScalar") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR); + REQUIRE(token.str.begin() == &input[3]); + REQUIRE(token.str.end() == &input[0] + 6); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::KEEP); + REQUIRE(lexer.get_block_scalar_header().indent == 3); // lexer returns content size if empty. + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("literal string scalar with 0 indent level.") { @@ -648,15 +665,47 @@ TEST_CASE("LexicalAnalyzer_LiteralStringScalar") { REQUIRE_THROWS_AS(lexer.get_next_token(), fkyaml::parse_error); } + SECTION("less indented literal string scalar with preceding empty line") { + const char input[] = "|2\n" + "\n" + " foo\n"; + + fkyaml::detail::lexical_analyzer lexer(input); + REQUIRE_THROWS_AS(lexer.get_next_token(), fkyaml::parse_error); + } + + SECTION("literal scalar with no newline on first and last content line") { + const char input[] = "|\n" + " foo"; + + fkyaml::detail::lexical_analyzer lexer(input); + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR); + REQUIRE(token.str.begin() == &input[2]); + REQUIRE(token.str.end() == &input[0] + 7); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); + } + SECTION("literal scalar with the first line being more indented than the indicated level") { const char input[] = "|2\n" + "\n" " foo\n" " bar\n"; fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == " foo\nbar\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR); + REQUIRE(token.str.begin() == &input[3]); + REQUIRE(token.str.end() == &input[0] + 18); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("literal string scalar") { @@ -666,8 +715,14 @@ TEST_CASE("LexicalAnalyzer_LiteralStringScalar") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "foo\nbar\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR); + REQUIRE(token.str.begin() == &input[2]); + REQUIRE(token.str.end() == &input[0] + 14); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("literal string scalar with implicit indentation and strip chomping") { @@ -681,8 +736,14 @@ TEST_CASE("LexicalAnalyzer_LiteralStringScalar") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "\nfoo\nbar\n\nbaz"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR); + REQUIRE(token.str.begin() == &input[3]); + REQUIRE(token.str.end() == &input[0] + 24); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::STRIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("literal string scalar with explicit indentation and strip chomping") { @@ -695,8 +756,14 @@ TEST_CASE("LexicalAnalyzer_LiteralStringScalar") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "foo\n bar\n\nbaz"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR); + REQUIRE(token.str.begin() == &input[4]); + REQUIRE(token.str.end() == &input[0] + 26); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::STRIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("literal string scalar with implicit indentation and clip chomping") { @@ -710,8 +777,14 @@ TEST_CASE("LexicalAnalyzer_LiteralStringScalar") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "\nfoo\nbar\n\nbaz\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR); + REQUIRE(token.str.begin() == &input[2]); + REQUIRE(token.str.end() == &input[0] + 23); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("literal string scalar with explicit indentation and clip chomping") { @@ -724,8 +797,14 @@ TEST_CASE("LexicalAnalyzer_LiteralStringScalar") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "foo\n bar\n\nbaz\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR); + REQUIRE(token.str.begin() == &input[3]); + REQUIRE(token.str.end() == &input[0] + 25); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("literal string scalar with clip chomping and no trailing newlines") { @@ -737,8 +816,14 @@ TEST_CASE("LexicalAnalyzer_LiteralStringScalar") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "foo\n bar\n\nbaz"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR); + REQUIRE(token.str.begin() == &input[3]); + REQUIRE(token.str.end() == &input[0] + 23); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("literal string scalar with implicit indentation and keep chomping") { @@ -752,8 +837,14 @@ TEST_CASE("LexicalAnalyzer_LiteralStringScalar") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "\nfoo\nbar\n\nbaz\n\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR); + REQUIRE(token.str.begin() == &input[3]); + REQUIRE(token.str.end() == &input[0] + 24); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::KEEP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("literal string scalar with explicit indentation and keep chomping") { @@ -766,8 +857,14 @@ TEST_CASE("LexicalAnalyzer_LiteralStringScalar") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "foo\n bar\n\nbaz\n\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR); + REQUIRE(token.str.begin() == &input[4]); + REQUIRE(token.str.end() == &input[0] + 26); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::KEEP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("literal string scalar with trailing spaces/tabs after the block scalar header.") { @@ -778,8 +875,14 @@ TEST_CASE("LexicalAnalyzer_LiteralStringScalar") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "foo\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR); + REQUIRE(token.str.begin() == &input[0] + input.find('\n') + 1); + REQUIRE(token.str.end() == &input[0] + input.size()); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("literal string scalar with invalid block scalar headers") { @@ -806,8 +909,14 @@ TEST_CASE("LexicalAnalyzer_FoldedString") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str.empty()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_FOLDED_SCALAR); + REQUIRE(token.str.begin() == &input[3]); + REQUIRE(token.str.end() == &input[0] + 6); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::STRIP); + REQUIRE(lexer.get_block_scalar_header().indent == 3); // lexer returns content size if empty. + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("empty folded string scalar with clip chomping") { @@ -816,8 +925,14 @@ TEST_CASE("LexicalAnalyzer_FoldedString") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == ""); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_FOLDED_SCALAR); + REQUIRE(token.str.begin() == &input[2]); + REQUIRE(token.str.end() == &input[0] + 5); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 3); // lexer returns content size if empty. + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("empty folded string scalar with keep chomping") { @@ -826,8 +941,14 @@ TEST_CASE("LexicalAnalyzer_FoldedString") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_FOLDED_SCALAR); + REQUIRE(token.str.begin() == &input[3]); + REQUIRE(token.str.end() == &input[0] + 6); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::KEEP); + REQUIRE(lexer.get_block_scalar_header().indent == 3); // lexer returns content size if empty. + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("folded string scalar with 0 indent level") { @@ -853,8 +974,14 @@ TEST_CASE("LexicalAnalyzer_FoldedString") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "\n foo\nbar\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_FOLDED_SCALAR); + REQUIRE(token.str.begin() == &input[3]); + REQUIRE(token.str.end() == &input[0] + 17); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("folded string scalar with the non-first line being more indented than the indicated level") { @@ -864,8 +991,14 @@ TEST_CASE("LexicalAnalyzer_FoldedString") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "foo\n bar\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_FOLDED_SCALAR); + REQUIRE(token.str.begin() == &input[3]); + REQUIRE(token.str.end() == &input[0] + 17); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("folded string scalar") { @@ -878,8 +1011,14 @@ TEST_CASE("LexicalAnalyzer_FoldedString") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "foo\n\nbar\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_FOLDED_SCALAR); + REQUIRE(token.str.begin() == &input[2]); + REQUIRE(token.str.end() == &input[0] + 20); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("folded string scalar with implicit indentation and strip chomping") { @@ -891,8 +1030,14 @@ TEST_CASE("LexicalAnalyzer_FoldedString") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "foo bar"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_FOLDED_SCALAR); + REQUIRE(token.str.begin() == &input[3]); + REQUIRE(token.str.end() == &input[0] + 18); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::STRIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("folded string scalar with implicit indentation and clip chomping") { @@ -904,8 +1049,14 @@ TEST_CASE("LexicalAnalyzer_FoldedString") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "foo bar\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_FOLDED_SCALAR); + REQUIRE(token.str.begin() == &input[2]); + REQUIRE(token.str.end() == &input[0] + 18); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("folded string scalar with implicit indentation and keep chomping") { @@ -917,8 +1068,14 @@ TEST_CASE("LexicalAnalyzer_FoldedString") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "foo bar\n\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_FOLDED_SCALAR); + REQUIRE(token.str.begin() == &input[3]); + REQUIRE(token.str.end() == &input[0] + 18); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::KEEP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("folded string scalar with trailing spaces/tabs/comments after the block scalar header.") { @@ -929,8 +1086,14 @@ TEST_CASE("LexicalAnalyzer_FoldedString") { fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "foo\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_FOLDED_SCALAR); + REQUIRE(token.str.begin() == &input[0] + input.find('\n') + 1); + REQUIRE(token.str.end() == &input[0] + input.size()); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); + + REQUIRE_NOTHROW(token = lexer.get_next_token()); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); } SECTION("folded string scalar with invalid block scalar headers") { @@ -1081,7 +1244,22 @@ TEST_CASE("LexicalAnalyzer_Tag") { fkyaml::detail::str_view("!<%f:oo> tag"), fkyaml::detail::str_view("! tag"), fkyaml::detail::str_view("!foo! tag"), - fkyaml::detail::str_view("!foo!%f:oo tag")); + fkyaml::detail::str_view("!foo!%f:oo tag"), + fkyaml::detail::str_view("!foo{ tag"), + fkyaml::detail::str_view("!foo} tag"), + fkyaml::detail::str_view("!foo[ tag"), + fkyaml::detail::str_view("!foo] tag"), + fkyaml::detail::str_view("!foo, tag"), + fkyaml::detail::str_view("!!foo{ tag"), + fkyaml::detail::str_view("!!foo} tag"), + fkyaml::detail::str_view("!!foo[ tag"), + fkyaml::detail::str_view("!!foo] tag"), + fkyaml::detail::str_view("!!foo, tag"), + fkyaml::detail::str_view("!foo!bar{ tag"), + fkyaml::detail::str_view("!foo!bar} tag"), + fkyaml::detail::str_view("!foo!bar[ tag"), + fkyaml::detail::str_view("!foo!bar] tag"), + fkyaml::detail::str_view("!foo!bar, tag")); fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_THROWS_AS(token = lexer.get_next_token(), fkyaml::parse_error); @@ -1185,6 +1363,7 @@ TEST_CASE("LexicalAnalyzer_FlowSequence") { REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::SEQUENCE_FLOW_BEGIN); + lexer.set_context_state(true); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::PLAIN_SCALAR); @@ -1199,6 +1378,7 @@ TEST_CASE("LexicalAnalyzer_FlowSequence") { REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::SEQUENCE_FLOW_END); + lexer.set_context_state(false); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); @@ -1216,6 +1396,7 @@ TEST_CASE("LexicalAnalyzer_FlowSequence") { REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::SEQUENCE_FLOW_BEGIN); + lexer.set_context_state(true); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::MAPPING_FLOW_BEGIN); @@ -1284,6 +1465,7 @@ TEST_CASE("LexicalAnalyzer_FlowSequence") { REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::SEQUENCE_FLOW_END); + lexer.set_context_state(false); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); @@ -1305,6 +1487,7 @@ TEST_CASE("LexicalAnalyzer_FlowMapping") { REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::MAPPING_FLOW_BEGIN); + lexer.set_context_state(true); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::PLAIN_SCALAR); @@ -1347,6 +1530,7 @@ TEST_CASE("LexicalAnalyzer_FlowMapping") { REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::MAPPING_FLOW_END); + lexer.set_context_state(false); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); @@ -1364,6 +1548,7 @@ TEST_CASE("LexicalAnalyzer_FlowMapping") { REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::MAPPING_FLOW_BEGIN); + lexer.set_context_state(true); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::PLAIN_SCALAR); @@ -1378,6 +1563,7 @@ TEST_CASE("LexicalAnalyzer_FlowMapping") { REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::MAPPING_FLOW_END); + lexer.set_context_state(false); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::END_OF_BUFFER); @@ -1531,7 +1717,8 @@ TEST_CASE("LexicalAnalyzer_BlockMapping") { } SECTION("block mapping with a literal string scalar value") { - fkyaml::detail::lexical_analyzer lexer("test: |\n a literal scalar.\nfoo: \'bar\'\npi: 3.14"); + char input[] = "test: |\n a block literal scalar.\nfoo: \'bar\'\npi: 3.14"; + fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::PLAIN_SCALAR); @@ -1541,8 +1728,11 @@ TEST_CASE("LexicalAnalyzer_BlockMapping") { REQUIRE(token.type == fkyaml::detail::lexical_token_t::KEY_SEPARATOR); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "a literal scalar.\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR); + REQUIRE(token.str.begin() == &input[8]); + REQUIRE(token.str.end() == &input[34]); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::PLAIN_SCALAR); @@ -1571,7 +1761,8 @@ TEST_CASE("LexicalAnalyzer_BlockMapping") { } SECTION("block mapping with a folded string scalar value") { - fkyaml::detail::lexical_analyzer lexer("test: >\n a literal scalar.\nfoo: \'bar\'\npi: 3.14"); + char input[] = "test: >\n a block folded scalar.\nfoo: \'bar\'\npi: 3.14"; + fkyaml::detail::lexical_analyzer lexer(input); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::PLAIN_SCALAR); @@ -1581,8 +1772,11 @@ TEST_CASE("LexicalAnalyzer_BlockMapping") { REQUIRE(token.type == fkyaml::detail::lexical_token_t::KEY_SEPARATOR); REQUIRE_NOTHROW(token = lexer.get_next_token()); - REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_SCALAR); - REQUIRE(token.str == "a literal scalar.\n"); + REQUIRE(token.type == fkyaml::detail::lexical_token_t::BLOCK_FOLDED_SCALAR); + REQUIRE(token.str.begin() == &input[8]); + REQUIRE(token.str.end() == &input[33]); + REQUIRE(lexer.get_block_scalar_header().chomp == fkyaml::detail::chomping_indicator_t::CLIP); + REQUIRE(lexer.get_block_scalar_header().indent == 2); REQUIRE_NOTHROW(token = lexer.get_next_token()); REQUIRE(token.type == fkyaml::detail::lexical_token_t::PLAIN_SCALAR); diff --git a/test/unit_test/test_node_attrs.cpp b/test/unit_test/test_node_attrs.cpp index 0d82e80d..57b1b7fb 100644 --- a/test/unit_test/test_node_attrs.cpp +++ b/test/unit_test/test_node_attrs.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_node_class.cpp b/test/unit_test/test_node_class.cpp index 00945f22..15538692 100644 --- a/test/unit_test/test_node_class.cpp +++ b/test/unit_test/test_node_class.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_node_ref_storage_class.cpp b/test/unit_test/test_node_ref_storage_class.cpp index 676be5dc..d0e89628 100644 --- a/test/unit_test/test_node_ref_storage_class.cpp +++ b/test/unit_test/test_node_ref_storage_class.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_node_type.cpp b/test/unit_test/test_node_type.cpp index cd40d73f..a7f62f06 100644 --- a/test/unit_test/test_node_type.cpp +++ b/test/unit_test/test_node_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_ordered_map_class.cpp b/test/unit_test/test_ordered_map_class.cpp index e11d535c..8d032263 100644 --- a/test/unit_test/test_ordered_map_class.cpp +++ b/test/unit_test/test_ordered_map_class.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_position_tracker_class.cpp b/test/unit_test/test_position_tracker_class.cpp index 82bb082e..5dab8774 100644 --- a/test/unit_test/test_position_tracker_class.cpp +++ b/test/unit_test/test_position_tracker_class.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_scalar_conv.cpp b/test/unit_test/test_scalar_conv.cpp index 757764f2..179100c1 100644 --- a/test/unit_test/test_scalar_conv.cpp +++ b/test/unit_test/test_scalar_conv.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_scalar_parser_class.cpp b/test/unit_test/test_scalar_parser_class.cpp new file mode 100644 index 00000000..94061c56 --- /dev/null +++ b/test/unit_test/test_scalar_parser_class.cpp @@ -0,0 +1,716 @@ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#include + +#include + +TEST_CASE("ScalarParser_FlowPlainScalar_null") { + fkyaml::node node {}; + fkyaml::detail::scalar_parser scalar_parser {0, 0}; + fkyaml::detail::lexical_token_t lex_type {fkyaml::detail::lexical_token_t::PLAIN_SCALAR}; + fkyaml::detail::tag_t tag_type {fkyaml::detail::tag_t::NONE}; + + SECTION("not tagged") { + auto token = GENERATE( + fkyaml::detail::str_view("null"), + fkyaml::detail::str_view("Null"), + fkyaml::detail::str_view("NULL"), + fkyaml::detail::str_view("~")); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, token)); + REQUIRE(node.is_null()); + } + + SECTION("tagged") { + tag_type = fkyaml::detail::tag_t::NULL_VALUE; + + auto token = GENERATE( + fkyaml::detail::str_view("null"), + fkyaml::detail::str_view("Null"), + fkyaml::detail::str_view("NULL"), + fkyaml::detail::str_view("~")); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, token)); + REQUIRE(node.is_null()); + } +} + +TEST_CASE("ScalarParser_FlowPlainScalar_boolean") { + fkyaml::node node {}; + fkyaml::detail::scalar_parser scalar_parser {0, 0}; + fkyaml::detail::lexical_token_t lex_type {fkyaml::detail::lexical_token_t::PLAIN_SCALAR}; + fkyaml::detail::tag_t tag_type {fkyaml::detail::tag_t::NONE}; + + using test_data_t = std::pair; + + SECTION("not tagged") { + auto test_data = GENERATE( + test_data_t("true", true), + test_data_t("True", true), + test_data_t("TRUE", true), + test_data_t("false", false), + test_data_t("False", false), + test_data_t("FALSE", false)); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, test_data.first)); + REQUIRE(node.is_boolean()); + REQUIRE(node.get_value() == test_data.second); + } + + SECTION("tagged") { + tag_type = fkyaml::detail::tag_t::BOOLEAN; + + auto test_data = GENERATE( + test_data_t("true", true), + test_data_t("True", true), + test_data_t("TRUE", true), + test_data_t("false", false), + test_data_t("False", false), + test_data_t("FALSE", false)); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, test_data.first)); + REQUIRE(node.is_boolean()); + REQUIRE(node.get_value() == test_data.second); + } +} + +TEST_CASE("ScalarParser_FlowPlainScalar_integer") { + fkyaml::node node {}; + fkyaml::detail::scalar_parser scalar_parser {0, 0}; + fkyaml::detail::lexical_token_t lex_type {fkyaml::detail::lexical_token_t::PLAIN_SCALAR}; + fkyaml::detail::tag_t tag_type {fkyaml::detail::tag_t::NONE}; + + using test_data_t = std::pair; + + SECTION("not tagged") { + auto test_data = + GENERATE(test_data_t("123", 123), test_data_t("-123", -123), test_data_t("0", 0), test_data_t("+456", 456)); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, test_data.first)); + REQUIRE(node.is_integer()); + REQUIRE(node.get_value() == test_data.second); + } + + SECTION("tagged") { + tag_type = fkyaml::detail::tag_t::INTEGER; + + auto test_data = GENERATE( + test_data_t("123", 123), + test_data_t("-123", -123), + test_data_t("0", 0), + test_data_t("+456", 456), + test_data_t("0o456", 0456), + test_data_t("0xA0f", 0xA0f)); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, test_data.first)); + REQUIRE(node.is_integer()); + REQUIRE(node.get_value() == test_data.second); + } +} + +TEST_CASE("ScalarParser_FlowPlainScalar_float") { + fkyaml::node node {}; + fkyaml::detail::scalar_parser scalar_parser {0, 0}; + fkyaml::detail::lexical_token_t lex_type {fkyaml::detail::lexical_token_t::PLAIN_SCALAR}; + fkyaml::detail::tag_t tag_type {fkyaml::detail::tag_t::NONE}; + + using test_data_t = std::pair; + + SECTION("normal values: not tagged") { + auto test_data = GENERATE( + test_data_t("1.23", 1.23f), + test_data_t("-1.23", -1.23f), + test_data_t("0.", 0.f), + test_data_t("+4.56", 4.56f), + test_data_t("4.5e3", 4.5e3f), + test_data_t("+4.5e3", 4.5e3f), + test_data_t("-4.5e3", -4.5e3f), + test_data_t("-4.5e-3", -4.5e-3f), + test_data_t("4.5E3", 4.5e3f), + test_data_t("+4.5E3", 4.5e3f), + test_data_t("-4.5E3", -4.5e3f), + test_data_t("-4.5E-3", -4.5e-3f)); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, test_data.first)); + REQUIRE(node.is_float_number()); + REQUIRE(node.get_value() == test_data.second); + } + + SECTION("infinities: not tagged") { + auto token = GENERATE( + fkyaml::detail::str_view(".inf"), + fkyaml::detail::str_view("+.inf"), + fkyaml::detail::str_view("-.inf"), + fkyaml::detail::str_view(".Inf"), + fkyaml::detail::str_view("+.Inf"), + fkyaml::detail::str_view("-.Inf"), + fkyaml::detail::str_view(".INF"), + fkyaml::detail::str_view("+.INF"), + fkyaml::detail::str_view("-.INF")); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, token)); + REQUIRE(node.is_float_number()); + REQUIRE(std::isinf(node.get_value())); + } + + SECTION("NaNs: not tagged") { + auto token = GENERATE( + fkyaml::detail::str_view(".nan"), fkyaml::detail::str_view(".NaN"), fkyaml::detail::str_view(".NAN")); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, token)); + REQUIRE(node.is_float_number()); + REQUIRE(std::isnan(node.get_value())); + } + + SECTION("normal values: tagged") { + tag_type = fkyaml::detail::tag_t::FLOATING_NUMBER; + + auto test_data = GENERATE( + test_data_t("1.23", 1.23f), + test_data_t("-1.23", -1.23f), + test_data_t("0.", 0.f), + test_data_t("+4.56", 4.56f), + test_data_t("4.5e3", 4.5e3f), + test_data_t("+4.5e3", 4.5e3f), + test_data_t("-4.5e3", -4.5e3f), + test_data_t("-4.5e-3", -4.5e-3f), + test_data_t("4.5E3", 4.5e3f), + test_data_t("+4.5E3", 4.5e3f), + test_data_t("-4.5E3", -4.5e3f), + test_data_t("-4.5E-3", -4.5e-3f), + test_data_t("123", 123.f)); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, test_data.first)); + REQUIRE(node.is_float_number()); + REQUIRE(node.get_value() == test_data.second); + } +} + +TEST_CASE("ScalarParser_FlowPlainScalar_string") { + fkyaml::node node {}; + fkyaml::detail::scalar_parser scalar_parser {0, 0}; + fkyaml::detail::tag_t tag_type {fkyaml::detail::tag_t::NONE}; + + SECTION("plain: normal contents") { + fkyaml::detail::lexical_token_t lex_type {fkyaml::detail::lexical_token_t::PLAIN_SCALAR}; + + auto token = GENERATE( + fkyaml::detail::str_view("test"), + fkyaml::detail::str_view("nop"), + fkyaml::detail::str_view("none"), + fkyaml::detail::str_view("?test"), + fkyaml::detail::str_view(".NET"), + fkyaml::detail::str_view(".on"), + fkyaml::detail::str_view(".n"), + fkyaml::detail::str_view("-t"), + fkyaml::detail::str_view("-foo"), + fkyaml::detail::str_view("-.test"), + fkyaml::detail::str_view("?"), + fkyaml::detail::str_view("--foo"), + fkyaml::detail::str_view("1.2.3"), + fkyaml::detail::str_view("foo,bar"), + fkyaml::detail::str_view("foo[bar"), + fkyaml::detail::str_view("foo]bar"), + fkyaml::detail::str_view("foo{bar"), + fkyaml::detail::str_view("foo}bar"), + fkyaml::detail::str_view("foo:bar"), + fkyaml::detail::str_view("foo bar"), + fkyaml::detail::str_view("foo\"bar"), + fkyaml::detail::str_view("foo\'s bar"), + fkyaml::detail::str_view("foo\\bar"), + fkyaml::detail::str_view("nullValue"), + fkyaml::detail::str_view("NullValue"), + fkyaml::detail::str_view("NULL_VALUE"), + fkyaml::detail::str_view("~Value"), + fkyaml::detail::str_view("trueValue"), + fkyaml::detail::str_view("TrueValue"), + fkyaml::detail::str_view("TRUE_VALUE"), + fkyaml::detail::str_view("falseValue"), + fkyaml::detail::str_view("FalseValue"), + fkyaml::detail::str_view("FALSE_VALUE"), + fkyaml::detail::str_view(".infValue"), + fkyaml::detail::str_view(".InfValue"), + fkyaml::detail::str_view(".INF_VALUE"), + fkyaml::detail::str_view("-.infValue"), + fkyaml::detail::str_view("-.InfValue"), + fkyaml::detail::str_view("-.INF_VALUE"), + fkyaml::detail::str_view(".nanValue"), + fkyaml::detail::str_view(".NaNValue"), + fkyaml::detail::str_view(".NAN_VALUE")); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, token)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == token); + } + + SECTION("single quoted: single line contents") { + fkyaml::detail::lexical_token_t lex_type {fkyaml::detail::lexical_token_t::SINGLE_QUOTED_SCALAR}; + using test_data_t = std::pair; + auto test_data = GENERATE( + test_data_t("", ""), + test_data_t("foo\"bar", "foo\"bar"), + test_data_t("foo bar", "foo bar"), + test_data_t("foo\'\'bar", "foo\'bar"), + test_data_t("foo,bar", "foo,bar"), + test_data_t("foo]bar", "foo]bar"), + test_data_t("foo}bar", "foo}bar"), + test_data_t("foo\"bar", "foo\"bar"), + test_data_t("foo:bar", "foo:bar"), + test_data_t("foo\\bar", "foo\\bar")); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, test_data.first)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == test_data.second); + } + + SECTION("single quoted: multiline contents") { + fkyaml::detail::lexical_token_t lex_type {fkyaml::detail::lexical_token_t::SINGLE_QUOTED_SCALAR}; + using test_data_t = std::pair; + auto test_data = GENERATE( + test_data_t("foo\nbar", "foo bar"), + test_data_t("foo \t\n \tbar", "foo bar"), + test_data_t("foo\n\n \t\nbar", "foo\n\nbar"), + test_data_t("\nfoo\n\n \t\nbar", " foo\n\nbar"), + test_data_t("foo\nbar\n", "foo bar "), + test_data_t("foo \t\t\t\nbar\n", "foo bar ")); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, test_data.first)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == test_data.second); + } + + SECTION("double quoted: single line contents") { + fkyaml::detail::lexical_token_t lex_type {fkyaml::detail::lexical_token_t::DOUBLE_QUOTED_SCALAR}; + using test_data_t = std::pair; + auto test_data = GENERATE( + test_data_t("", ""), + test_data_t("foo bar", "foo bar"), + test_data_t("foo\tbar", "foo\tbar"), + test_data_t("foo's bar", "foo's bar"), + test_data_t("foo:bar", "foo:bar"), + test_data_t("foo,bar", "foo,bar"), + test_data_t("foo]bar", "foo]bar"), + test_data_t("foo}bar", "foo}bar"), + test_data_t("\\x30\\x2B\\x6d", "0+m")); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, test_data.first)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == test_data.second); + } + + SECTION("double quoted: multiline contents") { + fkyaml::detail::lexical_token_t lex_type {fkyaml::detail::lexical_token_t::DOUBLE_QUOTED_SCALAR}; + using test_data_t = std::pair; + auto test_data = GENERATE( + test_data_t("foo\nbar", "foo bar"), + test_data_t("foo \t\n \tbar", "foo bar"), + test_data_t("foo\n\n \t\nbar", "foo\n\nbar"), + test_data_t("\nfoo\n\n \t\nbar", " foo\n\nbar"), + test_data_t("foo\nbar\n", "foo bar "), + test_data_t("foo\\\nbar", "foobar"), + test_data_t("foo \t\\\nbar", "foo \tbar"), + test_data_t("\\\n foo \t\\\n\tbar\t \t\\\n", "foo \tbar\t \t")); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, test_data.first)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == test_data.second); + } + + SECTION("double quoted: escaped unicode characters") { + fkyaml::detail::lexical_token_t lex_type {fkyaml::detail::lexical_token_t::DOUBLE_QUOTED_SCALAR}; + using test_data_t = std::pair; + auto to_char = [](int c) { return std::char_traits::to_char_type(c); }; + + auto test_data = GENERATE_REF( + test_data_t("\\x00", {to_char(0x00)}), + test_data_t("\\x40", {to_char(0x40)}), + test_data_t("\\x7F", {to_char(0x7F)}), + test_data_t("\\u0000", {to_char(0x00)}), + test_data_t("\\u0040", {to_char(0x40)}), + test_data_t("\\u007F", {to_char(0x7F)}), + test_data_t("\\u0080", {to_char(0xC2), to_char(0x80)}), + test_data_t("\\u0400", {to_char(0xD0), to_char(0x80)}), + test_data_t("\\u07FF", {to_char(0xDF), to_char(0xBF)}), + test_data_t("\\u0800", {to_char(0xE0), to_char(0xA0), to_char(0x80)}), + test_data_t("\\u8000", {to_char(0xE8), to_char(0x80), to_char(0x80)}), + test_data_t("\\uFFFF", {to_char(0xEF), to_char(0xBF), to_char(0xBF)}), + test_data_t("\\U00000000", {to_char(0x00)}), + test_data_t("\\U00000040", {to_char(0x40)}), + test_data_t("\\U0000007F", {to_char(0x7F)}), + test_data_t("\\U00000080", {to_char(0xC2), to_char(0x80)}), + test_data_t("\\U00000400", {to_char(0xD0), to_char(0x80)}), + test_data_t("\\U000007FF", {to_char(0xDF), to_char(0xBF)}), + test_data_t("\\U00000800", {to_char(0xE0), to_char(0xA0), to_char(0x80)}), + test_data_t("\\U00008000", {to_char(0xE8), to_char(0x80), to_char(0x80)}), + test_data_t("\\U0000FFFF", {to_char(0xEF), to_char(0xBF), to_char(0xBF)}), + test_data_t("\\U00010000", {to_char(0xF0), to_char(0x90), to_char(0x80), to_char(0x80)}), + test_data_t("\\U00080000", {to_char(0xF2), to_char(0x80), to_char(0x80), to_char(0x80)}), + test_data_t("\\U0010FFFF", {to_char(0xF4), to_char(0x8F), to_char(0xBF), to_char(0xBF)})); + + REQUIRE_NOTHROW(node = scalar_parser.parse_flow(lex_type, tag_type, test_data.first)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == test_data.second); + } + + SECTION("double quoted: invalid unicode escapings") { + fkyaml::detail::lexical_token_t lex_type {fkyaml::detail::lexical_token_t::DOUBLE_QUOTED_SCALAR}; + auto token = GENERATE( + fkyaml::detail::str_view("\\xw"), + fkyaml::detail::str_view("\\x+"), + fkyaml::detail::str_view("\\x="), + fkyaml::detail::str_view("\\x^"), + fkyaml::detail::str_view("\\x{"), + fkyaml::detail::str_view("\\Q")); + + REQUIRE_THROWS_AS(scalar_parser.parse_flow(lex_type, tag_type, token), fkyaml::parse_error); + } +} + +TEST_CASE("ScalarParser_BlockLiteralScalar") { + fkyaml::node node {}; + fkyaml::detail::scalar_parser scalar_parser {0, 0}; + fkyaml::detail::lexical_token_t lex_type {fkyaml::detail::lexical_token_t::BLOCK_LITERAL_SCALAR}; + fkyaml::detail::tag_t tag_type {fkyaml::detail::tag_t::NONE}; + fkyaml::detail::block_scalar_header header {}; + + SECTION("empty block literal scalar token.") { + fkyaml::detail::str_view token = ""; + header.chomp = fkyaml::detail::chomping_indicator_t::STRIP; + header.indent = 0; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == ""); + } + + SECTION("empty literal string scalar with strip chomping") { + fkyaml::detail::str_view token = " \n"; + header.chomp = fkyaml::detail::chomping_indicator_t::STRIP; + header.indent = 3; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == ""); + } + + SECTION("empty literal string scalar with clip chomping") { + fkyaml::detail::str_view token = " \n"; + header.chomp = fkyaml::detail::chomping_indicator_t::CLIP; + header.indent = 3; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == ""); + } + + SECTION("empty literal string scalar with keep chomping") { + fkyaml::detail::str_view token = " \n"; + header.chomp = fkyaml::detail::chomping_indicator_t::KEEP; + header.indent = 3; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "\n"); + } + + SECTION("literal scalar with the first line being more indented than the indicated level") { + fkyaml::detail::str_view token = " foo\n" + " bar\n"; + header.chomp = fkyaml::detail::chomping_indicator_t::CLIP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == " foo\nbar\n"); + } + + SECTION("literal string scalar") { + fkyaml::detail::str_view token = " foo\n" + " bar\n"; + header.chomp = fkyaml::detail::chomping_indicator_t::CLIP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "foo\nbar\n"); + } + + SECTION("literal string scalar with implicit indentation and strip chomping") { + fkyaml::detail::str_view token = "\n" + " foo\n" + " bar\n" + "\n" + " baz\n" + "\n"; + header.chomp = fkyaml::detail::chomping_indicator_t::STRIP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "\nfoo\nbar\n\nbaz"); + } + + SECTION("literal string scalar with explicit indentation and strip chomping") { + fkyaml::detail::str_view token = "\n" + " foo\n" + " bar\n" + "\n" + " baz\n" + "\n"; + header.chomp = fkyaml::detail::chomping_indicator_t::STRIP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "\nfoo\n bar\n\nbaz"); + } + + SECTION("literal string scalar with implicit indentation and clip chomping") { + fkyaml::detail::str_view token = "\n" + " foo\n" + " bar\n" + "\n" + " baz\n" + "\n"; + header.chomp = fkyaml::detail::chomping_indicator_t::CLIP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "\nfoo\nbar\n\nbaz\n"); + } + + SECTION("literal string scalar with explicit indentation and clip chomping") { + fkyaml::detail::str_view token = "\n" + " foo\n" + " bar\n" + "\n" + " baz\n" + "\n"; + header.chomp = fkyaml::detail::chomping_indicator_t::STRIP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "\nfoo\n bar\n\nbaz"); + } + + SECTION("literal string scalar with clip chomping and no trailing newlines") { + fkyaml::detail::str_view token = " foo\n" + " bar\n" + "\n" + " baz"; + header.chomp = fkyaml::detail::chomping_indicator_t::STRIP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "foo\nbar\n\nbaz"); + } + + SECTION("literal string scalar with implicit indentation and keep chomping") { + fkyaml::detail::str_view token = "\n" + " foo\n" + " bar\n" + "\n" + " baz\n" + "\n"; + header.chomp = fkyaml::detail::chomping_indicator_t::KEEP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "\nfoo\nbar\n\nbaz\n\n"); + } + + SECTION("literal string scalar with explicit indentation and keep chomping") { + fkyaml::detail::str_view token = " foo\n" + " bar\n" + "\n" + " baz\n" + "\n"; + header.chomp = fkyaml::detail::chomping_indicator_t::KEEP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "foo\n bar\n\nbaz\n\n"); + } +} + +TEST_CASE("ScalarParser_BlockFoldedScalar") { + fkyaml::node node {}; + fkyaml::detail::scalar_parser scalar_parser {0, 0}; + fkyaml::detail::lexical_token_t lex_type {fkyaml::detail::lexical_token_t::BLOCK_FOLDED_SCALAR}; + fkyaml::detail::tag_t tag_type {fkyaml::detail::tag_t::NONE}; + fkyaml::detail::block_scalar_header header {}; + + SECTION("empty block folded scalar token.") { + fkyaml::detail::str_view token = ""; + header.chomp = fkyaml::detail::chomping_indicator_t::STRIP; + header.indent = 0; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == ""); + } + + SECTION("empty folded string scalar with strip chomping") { + fkyaml::detail::str_view token = " \n"; + + header.chomp = fkyaml::detail::chomping_indicator_t::STRIP; + header.indent = 3; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == ""); + } + + SECTION("empty folded string scalar with clip chomping") { + fkyaml::detail::str_view token = " \n"; + + header.chomp = fkyaml::detail::chomping_indicator_t::CLIP; + header.indent = 3; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == ""); + } + + SECTION("empty folded string scalar with keep chomping") { + fkyaml::detail::str_view token = " \n"; + + header.chomp = fkyaml::detail::chomping_indicator_t::KEEP; + header.indent = 3; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "\n"); + } + + SECTION("folded string scalar with the first line being more indented than the indicated level") { + fkyaml::detail::str_view token = " foo\n" + " bar\n"; + + header.chomp = fkyaml::detail::chomping_indicator_t::CLIP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == " foo\nbar\n"); + } + + SECTION("folded string scalar with the non-first line being more indented than the indicated level") { + fkyaml::detail::str_view token = " foo\n" + " bar\n"; + + header.chomp = fkyaml::detail::chomping_indicator_t::CLIP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "foo\n bar\n"); + } + + SECTION("folded string scalar") { + fkyaml::detail::str_view token = " foo\n" + " \n" + "\n" + " bar\n" + " \n"; + + header.chomp = fkyaml::detail::chomping_indicator_t::CLIP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "foo\n\nbar\n"); + } + + SECTION("folded string scalar with implicit indentation and strip chomping") { + fkyaml::detail::str_view token = " foo\n" + " bar\n" + " \n" + "\n"; + + header.chomp = fkyaml::detail::chomping_indicator_t::STRIP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "foo bar"); + } + + SECTION("folded string scalar with implicit indentation and clip chomping") { + fkyaml::detail::str_view token = " foo\n" + " bar\n" + " \n" + "\n"; + + header.chomp = fkyaml::detail::chomping_indicator_t::CLIP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "foo bar\n"); + } + + SECTION("folded string scalar with implicit indentation and keep chomping") { + fkyaml::detail::str_view token = " foo\n" + " bar\n" + " \n" + "\n"; + + header.chomp = fkyaml::detail::chomping_indicator_t::KEEP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "foo bar\n\n"); + } + + SECTION("block folded scalar with no newline at the last content line and strip chomping.") { + fkyaml::detail::str_view token = " foo\n" + " bar\n" + "\n" + " baz"; + header.chomp = fkyaml::detail::chomping_indicator_t::STRIP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "foo bar\nbaz"); + } + + SECTION("block folded scalar with no newline at the last content line and clip chomping.") { + fkyaml::detail::str_view token = " foo\n" + " bar\n" + "\n" + " baz"; + header.chomp = fkyaml::detail::chomping_indicator_t::CLIP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "foo bar\nbaz"); + } + + SECTION("block folded scalar with no newline at the last more-indented content line.") { + fkyaml::detail::str_view token = " foo\n" + " bar\n" + "\n" + " baz"; + header.chomp = fkyaml::detail::chomping_indicator_t::STRIP; + header.indent = 2; + + REQUIRE_NOTHROW(node = scalar_parser.parse_block(lex_type, tag_type, token, header)); + REQUIRE(node.is_string()); + REQUIRE(node.get_value_ref() == "foo bar\n baz"); + } +} diff --git a/test/unit_test/test_scalar_scanner_class.cpp b/test/unit_test/test_scalar_scanner_class.cpp index 770e4b67..6c764083 100644 --- a/test/unit_test/test_scalar_scanner_class.cpp +++ b/test/unit_test/test_scalar_scanner_class.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_serializer_class.cpp b/test/unit_test/test_serializer_class.cpp index 925c9396..7d69c7c5 100644 --- a/test/unit_test/test_serializer_class.cpp +++ b/test/unit_test/test_serializer_class.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani @@ -50,9 +50,14 @@ TEST_CASE("Serializer_IntegerNode") { REQUIRE(serializer.serialize(node_str_pair.first) == node_str_pair.second); } -TEST_CASE("SerializeClassTest_FloatNumberNode", "[SerializeClassTest]") { +TEST_CASE("SerializeClassTest_FloatNode", "[SerializeClassTest]") { using node_str_pair_t = std::pair; auto node_str_pair = GENERATE( + node_str_pair_t(0.0, "0.0"), + node_str_pair_t(-2.0, "-2.0"), + node_str_pair_t(2.0, "2.0"), + node_str_pair_t(-2.10, "-2.1"), + node_str_pair_t(2.10, "2.1"), node_str_pair_t(3.14, "3.14"), node_str_pair_t(-53.97, "-53.97"), node_str_pair_t(std::numeric_limits::infinity(), ".inf"), diff --git a/test/unit_test/test_str_view_class.cpp b/test/unit_test/test_str_view_class.cpp index 4e032a13..01c05384 100644 --- a/test/unit_test/test_str_view_class.cpp +++ b/test/unit_test/test_str_view_class.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_string_formatter.cpp b/test/unit_test/test_string_formatter.cpp index e9b360a0..9dd02570 100644 --- a/test/unit_test/test_string_formatter.cpp +++ b/test/unit_test/test_string_formatter.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_tag_resolver_class.cpp b/test/unit_test/test_tag_resolver_class.cpp index 495f058a..0349dcb6 100644 --- a/test/unit_test/test_tag_resolver_class.cpp +++ b/test/unit_test/test_tag_resolver_class.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_uri_encoding_class.cpp b/test/unit_test/test_uri_encoding_class.cpp index 233a65a6..4dfbf3a9 100644 --- a/test/unit_test/test_uri_encoding_class.cpp +++ b/test/unit_test/test_uri_encoding_class.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_utf_encode_detector.cpp b/test/unit_test/test_utf_encode_detector.cpp index 5ac4371e..0b7fdd29 100644 --- a/test/unit_test/test_utf_encode_detector.cpp +++ b/test/unit_test/test_utf_encode_detector.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_utf_encodings.cpp b/test/unit_test/test_utf_encodings.cpp index 06dfa6a8..0ff1e298 100644 --- a/test/unit_test/test_utf_encodings.cpp +++ b/test/unit_test/test_utf_encodings.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_yaml_escaper_class.cpp b/test/unit_test/test_yaml_escaper_class.cpp index b5ba72ed..849f3a27 100644 --- a/test/unit_test/test_yaml_escaper_class.cpp +++ b/test/unit_test/test_yaml_escaper_class.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/test/unit_test/test_yaml_version_type.cpp b/test/unit_test/test_yaml_version_type.cpp index 062f096a..06f1e32a 100644 --- a/test/unit_test/test_yaml_version_type.cpp +++ b/test/unit_test/test_yaml_version_type.cpp @@ -1,6 +1,6 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani diff --git a/tool/benchmark/CMakeLists.txt b/tool/benchmark/CMakeLists.txt index 0ee69254..b687d757 100644 --- a/tool/benchmark/CMakeLists.txt +++ b/tool/benchmark/CMakeLists.txt @@ -3,11 +3,12 @@ # Set up benchmarking tool # ################################ -# disable building unit tests for Google Benchmark. +include(FetchContent) + +# Google benchmark +# disable building unit tests. set(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "" FORCE) set(BENCHMARK_ENABLE_GTEST_TESTS OFF CACHE BOOL "" FORCE) - -include(FetchContent) FetchContent_Declare( gbench URL https://github.com/google/benchmark/archive/refs/tags/v1.8.4.zip @@ -32,7 +33,7 @@ endif() FetchContent_Declare( rapidyaml GIT_REPOSITORY https://github.com/biojppm/rapidyaml - GIT_TAG v0.6.0 + GIT_TAG v0.7.2 GIT_SUBMODULES "ext/c4core" ) FetchContent_MakeAvailable(rapidyaml) @@ -59,8 +60,21 @@ add_executable( target_compile_options( benchmarker PRIVATE - $<$:-O1> - $<$:-O2> + $<$: + $<$:/O1> + $<$:/O2> + > + + $<$>: + $<$:-O1> + $<$:-O2> + > +) + +target_compile_options( + ryml + PUBLIC + $<$: /wd4819> ) target_link_libraries( diff --git a/tool/benchmark/README.md b/tool/benchmark/README.md index 3dae7f38..7cc6d1ff 100644 --- a/tool/benchmark/README.md +++ b/tool/benchmark/README.md @@ -1,12 +1,27 @@ # Benchmark -This tool runs benchmarking with [the Google Benchmark library](https://github.com/google/benchmark/) ([v1.8.4](https://github.com/google/benchmark/releases/tag/v1.8.4)) against fkYAML and the following C++ YAML libraries tagged with the specified versions respectively: +This tool runs benchmarking of deserialization performance with [the Google Benchmark library](https://github.com/google/benchmark/) (tag: [v1.8.4](https://github.com/google/benchmark/releases/tag/v1.8.4), the latest version supporting C++11) against fkYAML and some C++ YAML library. + +## Used YAML library for Comparison + +Currently, the following C++ YAML libraries tagged with the specified versions respectively: * [libfyaml](https://github.com/pantoniou/libfyaml) ([v0.9](https://github.com/pantoniou/libfyaml/releases/tag/v0.9)) -* [rapidyaml](https://github.com/biojppm/rapidyaml) ([v0.6.0](https://github.com/biojppm/rapidyaml/releases/tag/v0.6.0)) +* [rapidyaml](https://github.com/biojppm/rapidyaml) ([v0.7.2](https://github.com/biojppm/rapidyaml/releases/tag/v0.7.2)) * [yaml-cpp](https://github.com/jbeder/yaml-cpp) ([0.8.0](https://github.com/jbeder/yaml-cpp/releases/tag/0.8.0)) -Currently, the [macos.yml](https://github.com/fktn-k/fkYAML/blob/develop/tool/benchmark/macos.yml) file is used for the benchmarking which was copied from the [.github/workflows](https://github.com/fktn-k/fkYAML/tree/develop/.github/workflows) directory at the point of the commit hash [e1c740f0c93766cfdd0b704ffb46113acd6bd922](https://github.com/fktn-k/fkYAML/commit/e1c740f0c93766cfdd0b704ffb46113acd6bd922). -More YAML files are planned to be added for the benchmarking so the resulting score would be more accurate and reliable. +Currently, the following files are located in the [tool/benchmark/cases](https://github.com/fktn-k/fkYAML/tree/develop/tool/benchmark/cases) directory for benchmarking: + +* ubuntu.yml + * a copy from the [.github/workflows](https://github.com/fktn-k/fkYAML/tree/develop/.github/workflows) directory at the point of the commit [7092059](https://github.com/fktn-k/fkYAML/commit/709205948966a8415b76aa8a87371133a04fd675) + * for the benchmarking of an ordinary size/content benchmark +* citm_catalog.json + * a copy from the [miloyip/nativejson-benchmark](https://github.com/miloyip/nativejson-benchmark) repository (tag: [v1.0.0](https://github.com/miloyip/nativejson-benchmark/releases/tag/v1.0.0)) + * for the benchmarking of a large JSON file +* citm_catalog.yml + * a YAML version of citm_catalog.json + * for the benchmarking of a large YAML file + +Suggestions are always welcome. Please open a discussion or create a PR. ## How to Use @@ -16,6 +31,8 @@ Build and run this tool with the following commands: $ cd path/to/fkYAML $ cmake -S . -B build -DCMAKE_BUILD_TYPE={Debug|Release} -DFK_YAML_RUN_BENCHMARK=ON $ cmake --build build --config {Debug|Release} + +# You can specify an arbitrary input file such as /foo/bar/sample.yml or /foo/bar/sample.json $ ./build/tool/benchmark/benchmarker ./tool/benchmark/macos.yml ``` diff --git a/tool/benchmark/cases/citm_catalog.json b/tool/benchmark/cases/citm_catalog.json new file mode 100644 index 00000000..245fdbbe --- /dev/null +++ b/tool/benchmark/cases/citm_catalog.json @@ -0,0 +1,50469 @@ +{ + "areaNames": { + "205705993": "Arrière-scène central", + "205705994": "1er balcon central", + "205705995": "2ème balcon bergerie cour", + "205705996": "2ème balcon bergerie jardin", + "205705998": "1er balcon bergerie jardin", + "205705999": "1er balcon bergerie cour", + "205706000": "Arrière-scène jardin", + "205706001": "Arrière-scène cour", + "205706002": "2ème balcon jardin", + "205706003": "2ème balcon cour", + "205706004": "2ème Balcon central", + "205706005": "1er balcon jardin", + "205706006": "1er balcon cour", + "205706007": "Orchestre central", + "205706008": "Orchestre jardin", + "205706009": "Orchestre cour", + "342752287": "Zone physique secrète" + }, + "audienceSubCategoryNames": { + "337100890": "Abonné" + }, + "blockNames": {}, + "events": { + "138586341": { + "description": null, + "id": 138586341, + "logo": null, + "name": "30th Anniversary Tour", + "subTopicIds": [ + 337184269, + 337184283 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604 + ] + }, + "138586345": { + "description": null, + "id": 138586345, + "logo": "/images/UE0AAAAACEKo6QAAAAZDSVRN", + "name": "Berliner Philharmoniker", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586349": { + "description": null, + "id": 138586349, + "logo": "/images/UE0AAAAACEKo7QAAAAZDSVRN", + "name": "Berliner Philharmoniker", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586353": { + "description": null, + "id": 138586353, + "logo": "/images/UE0AAAAACEKo8QAAAAZDSVRN", + "name": "Pittsburgh Symphony Orchestra", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586357": { + "description": null, + "id": 138586357, + "logo": "/images/UE0AAAAACEKo9QAAAAhDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586361": { + "description": null, + "id": 138586361, + "logo": "/images/UE0AAAAACEKo+QAAAAVDSVRN", + "name": "WDR Sinfonieorchester Köln", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586365": { + "description": null, + "id": 138586365, + "logo": "/images/UE0AAAAACEKo/QAAAAVDSVRN", + "name": "Alessandro - G.F. Haendel", + "subTopicIds": [ + 337184284, + 337184263, + 337184298, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586369": { + "description": null, + "id": 138586369, + "logo": "/images/UE0AAAAACEKpAQAAAAVDSVRN", + "name": "Orchestre Colonne", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586373": { + "description": null, + "id": 138586373, + "logo": "/images/UE0AAAAACEKpBQAAAAdDSVRN", + "name": "Christophe", + "subTopicIds": [ + 337184280, + 337184297, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586377": { + "description": null, + "id": 138586377, + "logo": "/images/UE0AAAAACEKpCQAAAAVDSVRN", + "name": "Joshua Redman Quartet", + "subTopicIds": [ + 337184269, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586381": { + "description": null, + "id": 138586381, + "logo": "/images/UE0AAAAACEKpDQAAAAVDSVRN", + "name": "Orchestre Symphonique d'Etat de São Paulo", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586385": { + "description": null, + "id": 138586385, + "logo": "/images/UE0AAAAACEKpEQAAAAVDSVRN", + "name": "Le génie italien", + "subTopicIds": [ + 337184284, + 337184298, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586389": { + "description": null, + "id": 138586389, + "logo": "/images/UE0AAAAACEKpFQAAAAVDSVRN", + "name": "Les Noces de Figaro - W.A. Mozart (version de concert)", + "subTopicIds": [ + 337184284, + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586393": { + "description": null, + "id": 138586393, + "logo": "/images/UE0AAAAACEKpGQAAAAhDSVRN", + "name": "Orchestre Pasdeloup", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586397": { + "description": null, + "id": 138586397, + "logo": null, + "name": "The Saxophone Summit", + "subTopicIds": [ + 337184269, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586401": { + "description": null, + "id": 138586401, + "logo": "/images/UE0AAAAACEKpIQAAAAVDSVRN", + "name": "Patricia Petibon - Nouveau Monde", + "subTopicIds": [ + 337184263, + 337184298, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586405": { + "description": null, + "id": 138586405, + "logo": "/images/UE0AAAAACEKpJQAAAAVDSVRN", + "name": "Russian National Orchestra", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586409": { + "description": null, + "id": 138586409, + "logo": "/images/UE0AAAAACEKpKQAAAAZDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586413": { + "description": null, + "id": 138586413, + "logo": "/images/UE0AAAAACEKpLQAAAAVDSVRN", + "name": "Evgeny Kissin", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586417": { + "description": null, + "id": 138586417, + "logo": "/images/UE0AAAAACEKpMQAAAAZDSVRN", + "name": "Bach, concertos pour piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586421": { + "description": null, + "id": 138586421, + "logo": "/images/UE0AAAAACEKpNQAAAAVDSVRN", + "name": "Bach, concertos pour piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586425": { + "description": null, + "id": 138586425, + "logo": null, + "name": "Orchestre National d'Île-de-France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586429": { + "description": null, + "id": 138586429, + "logo": "/images/UE0AAAAACEKpPQAAAAVDSVRN", + "name": "Gewandhausorchester Leipzig", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586433": { + "description": null, + "id": 138586433, + "logo": "/images/UE0AAAAACEKpQQAAAAVDSVRN", + "name": "Gewandhausorchester Leipzig", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586437": { + "description": null, + "id": 138586437, + "logo": "/images/UE0AAAAACEKpRQAAAAVDSVRN", + "name": "Budapest Festival Orchestra", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586441": { + "description": null, + "id": 138586441, + "logo": "/images/UE0AAAAACEKpSQAAAAVDSVRN", + "name": "Orchestre National du Capitole de Toulouse", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586445": { + "description": null, + "id": 138586445, + "logo": "/images/UE0AAAAACEKpTQAAAAVDSVRN", + "name": "Gewandhausorchester Leipzig", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586449": { + "description": null, + "id": 138586449, + "logo": "/images/UE0AAAAACEKpUQAAAAVDSVRN", + "name": "Gewandhausorchester Leipzig", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586453": { + "description": null, + "id": 138586453, + "logo": "/images/UE0AAAAACEKpVQAAAAVDSVRN", + "name": "Remember Shakti", + "subTopicIds": [ + 337184269, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586457": { + "description": null, + "id": 138586457, + "logo": "/images/UE0AAAAACEKpWQAAAAVDSVRN", + "name": "Menahem Pressler - Quatuor Ebène", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586461": { + "description": null, + "id": 138586461, + "logo": "/images/UE0AAAAACEKpXQAAAAZDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586465": { + "description": null, + "id": 138586465, + "logo": "/images/UE0AAAAACEKpYQAAAAVDSVRN", + "name": "Orquesta Buena Vista Social Club", + "subTopicIds": [ + 337184279, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586469": { + "description": null, + "id": 138586469, + "logo": "/images/UE0AAAAACEKpZQAAAAVDSVRN", + "name": "The Cleveland Orchestra", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586473": { + "description": null, + "id": 138586473, + "logo": "/images/UE0AAAAACEKpaQAAAAVDSVRN", + "name": "The Cleveland Orchestra", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586477": { + "description": null, + "id": 138586477, + "logo": "/images/UE0AAAAACEKpbQAAAAZDSVRN", + "name": "Orchestre Philharmonique du Luxembourg", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586481": { + "description": null, + "id": 138586481, + "logo": "/images/UE0AAAAACEKpcQAAAAVDSVRN", + "name": "Maurizio Pollini, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586485": { + "description": null, + "id": 138586485, + "logo": "/images/UE0AAAAACEKpdQAAAAZDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586501": { + "description": null, + "id": 138586501, + "logo": "/images/UE0AAAAACEKphQAAAAVDSVRN", + "name": "Antonio Meneses - Maria-João Pires", + "subTopicIds": [ + 337184268, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586505": { + "description": null, + "id": 138586505, + "logo": "/images/UE0AAAAACEKpiQAAAAVDSVRN", + "name": "Musiques pour la reine Caroline", + "subTopicIds": [ + 337184284, + 337184263, + 337184298, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586509": { + "description": null, + "id": 138586509, + "logo": null, + "name": "Orchestre National d'Île-de-France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586513": { + "description": null, + "id": 138586513, + "logo": "/images/UE0AAAAACEKpkQAAAAVDSVRN", + "name": "Les Mystères d'Isis - W.A. Mozart (cersion de concert)", + "subTopicIds": [ + 337184284, + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586517": { + "description": null, + "id": 138586517, + "logo": "/images/UE0AAAAACEKplQAAAAdDSVRN", + "name": "Martha Argerich - Gidon Kremer", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586521": { + "description": null, + "id": 138586521, + "logo": "/images/UE0AAAAACEKpmQAAAAVDSVRN", + "name": "Cecilia Bartoli - Mozart et la Vienne classique", + "subTopicIds": [ + 337184298, + 337184268, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586525": { + "description": null, + "id": 138586525, + "logo": "/images/UE0AAAAACEKpnQAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586529": { + "description": null, + "id": 138586529, + "logo": null, + "name": "Orchestre Pasdeloup", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586533": { + "description": null, + "id": 138586533, + "logo": "/images/UE0AAAAACEKppQAAAAVDSVRN", + "name": "Orchestre du Théâtre Mariinsky", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586537": { + "description": null, + "id": 138586537, + "logo": "/images/UE0AAAAACEKpqQAAAAVDSVRN", + "name": "Orchestre du Théâtre Mariinsky", + "subTopicIds": [ + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586541": { + "description": null, + "id": 138586541, + "logo": "/images/UE0AAAAACEKprQAAAAVDSVRN", + "name": "Orchestre du Théâtre Mariinsky", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586545": { + "description": null, + "id": 138586545, + "logo": "/images/UE0AAAAACEKpsQAAAAVDSVRN", + "name": "Academy of Saint Martin in the Fields", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586549": { + "description": null, + "id": 138586549, + "logo": "/images/UE0AAAAACEKptQAAAAVDSVRN", + "name": "Quatuor Hagen", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586553": { + "description": null, + "id": 138586553, + "logo": "/images/UE0AAAAACEKpuQAAAAVDSVRN", + "name": "Quatuor Hagen", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586557": { + "description": null, + "id": 138586557, + "logo": "/images/UE0AAAAACEKpvQAAAAVDSVRN", + "name": "Quatuor Hagen", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586561": { + "description": null, + "id": 138586561, + "logo": "/images/UE0AAAAACEKpwQAAAAVDSVRN", + "name": "Sunwook Kim, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586565": { + "description": null, + "id": 138586565, + "logo": null, + "name": "Orchestre Colonne", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586569": { + "description": null, + "id": 138586569, + "logo": "/images/UE0AAAAACEKpyQAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586581": { + "description": null, + "id": 138586581, + "logo": null, + "name": "Orchestre National de France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586585": { + "description": null, + "id": 138586585, + "logo": "/images/UE0AAAAACEKp2QAAAAVDSVRN", + "name": "Messe en si mineur - J.S. Bach", + "subTopicIds": [ + 337184296, + 337184263, + 337184298, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586589": { + "description": null, + "id": 138586589, + "logo": null, + "name": "Le Messie - G.F. Haendel", + "subTopicIds": [ + 337184263, + 337184298, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586593": { + "description": null, + "id": 138586593, + "logo": "/images/UE0AAAAACEKp4QAAAAdDSVRN", + "name": "Orchestre National d'Île-de-France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586597": { + "description": null, + "id": 138586597, + "logo": "/images/UE0AAAAACEKp5QAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586601": { + "description": null, + "id": 138586601, + "logo": "/images/UE0AAAAACEKp6QAAAAdDSVRN", + "name": "Orchestre Pasdeloup", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586605": { + "description": null, + "id": 138586605, + "logo": null, + "name": "Orchestre Colonne", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586609": { + "description": null, + "id": 138586609, + "logo": null, + "name": "Ciné-concert - Le Cuirassé Potemkine", + "subTopicIds": [ + 337184267, + 337184262, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 107888604, + 324846100 + ] + }, + "138586613": { + "description": null, + "id": 138586613, + "logo": "/images/UE0AAAAACEKp9QAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586617": { + "description": null, + "id": 138586617, + "logo": "/images/UE0AAAAACEKp+QAAAAVDSVRN", + "name": "London Symphony Orchestra", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586625": { + "description": null, + "id": 138586625, + "logo": null, + "name": "Orchestre National d'Île-de-France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586629": { + "description": null, + "id": 138586629, + "logo": "/images/UE0AAAAACEKqBQAAAAVDSVRN", + "name": "Orquesta Sinfonica Simón Bolívar de Venezuela", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586633": { + "description": null, + "id": 138586633, + "logo": "/images/UE0AAAAACEKqCQAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184298, + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586641": { + "description": null, + "id": 138586641, + "logo": "/images/UE0AAAAACEKqEQAAAAVDSVRN", + "name": "Edita Gruberova - Airs de concert", + "subTopicIds": [ + 337184284, + 337184298, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586645": { + "description": null, + "id": 138586645, + "logo": "/images/UE0AAAAACEKqFQAAAAdDSVRN", + "name": "Orchestre National d'Île-de-France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586649": { + "description": null, + "id": 138586649, + "logo": "/images/UE0AAAAACEKqGQAAAAZDSVRN", + "name": "Alexei Volodin, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586653": { + "description": null, + "id": 138586653, + "logo": null, + "name": "Sonya Yoncheva - Diva !", + "subTopicIds": [ + 337184284, + 337184263, + 337184298, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586657": { + "description": null, + "id": 138586657, + "logo": "/images/UE0AAAAACEKqIQAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586661": { + "description": null, + "id": 138586661, + "logo": null, + "name": "Le Ramayana balinais - L'Enlèvement de Sita", + "subTopicIds": [ + 337184279, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586667": { + "description": null, + "id": 138586667, + "logo": null, + "name": "Dave Holland & friends", + "subTopicIds": [ + 337184269, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586671": { + "description": null, + "id": 138586671, + "logo": "/images/UE0AAAAACEKqLwAAAAlDSVRN", + "name": "Boris Godounov - M.Moussorgski (version de concert)", + "subTopicIds": [ + 337184284, + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586675": { + "description": null, + "id": 138586675, + "logo": "/images/UE0AAAAACEKqMwAAAAVDSVRN", + "name": "Insula orchestra - Accentus", + "subTopicIds": [ + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586679": { + "description": null, + "id": 138586679, + "logo": "/images/UE0AAAAACEKqNwAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586687": { + "description": null, + "id": 138586687, + "logo": "/images/UE0AAAAACEKqPwAAAAVDSVRN", + "name": "Bryn Terfel - Héros légendaires", + "subTopicIds": [ + 337184284, + 337184298, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586691": { + "description": null, + "id": 138586691, + "logo": null, + "name": "Les Siècles", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586695": { + "description": null, + "id": 138586695, + "logo": "/images/UE0AAAAACEKqRwAAAAVDSVRN", + "name": "Gautier Capuçon - Frank Braley", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586699": { + "description": null, + "id": 138586699, + "logo": null, + "name": "Festival Présences 2014 \"Paris Berlin\"", + "subTopicIds": [ + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586703": { + "description": null, + "id": 138586703, + "logo": "/images/UE0AAAAACEKqTwAAAAZDSVRN", + "name": "Autour de Tristan", + "subTopicIds": [ + 337184284, + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586707": { + "description": null, + "id": 138586707, + "logo": "/images/UE0AAAAACEKqUwAAAAVDSVRN", + "name": "Orchestre du Théâtre Mariinsky", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586711": { + "description": null, + "id": 138586711, + "logo": "/images/UE0AAAAACEKqVwAAAAVDSVRN", + "name": "Orchestre du Théâtre Mariinsky", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586715": { + "description": null, + "id": 138586715, + "logo": "/images/UE0AAAAACEKqWwAAAAVDSVRN", + "name": "Orchestre du Théâtre Mariinsky", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586719": { + "description": null, + "id": 138586719, + "logo": "/images/UE0AAAAACEKqXwAAAAVDSVRN", + "name": "Etienne Daho et invités", + "subTopicIds": [ + 337184280, + 337184297, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586723": { + "description": null, + "id": 138586723, + "logo": null, + "name": "Fantasia in concert", + "subTopicIds": [ + 337184299, + 337184268, + 337184267, + 337184275, + 337184282 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846098, + 324846099, + 107888604, + 324846100 + ] + }, + "138586731": { + "description": null, + "id": 138586731, + "logo": "/images/UE0AAAAACEKqawAAAAVDSVRN", + "name": "Khatia Buniatishvili, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586735": { + "description": null, + "id": 138586735, + "logo": "/images/UE0AAAAACEKqbwAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586743": { + "description": null, + "id": 138586743, + "logo": null, + "name": "Guy Braunstein - Zvi Plesser - Sunwook Kim", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586747": { + "description": null, + "id": 138586747, + "logo": "/images/UE0AAAAACEKqewAAAAVDSVRN", + "name": "Janine Jansen and friends", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586751": { + "description": null, + "id": 138586751, + "logo": "/images/UE0AAAAACEKqfwAAAAVDSVRN", + "name": "Elena Bashkirova, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586755": { + "description": null, + "id": 138586755, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184284, + 337184298, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586759": { + "description": null, + "id": 138586759, + "logo": null, + "name": "San Francisco Symphony", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586771": { + "description": null, + "id": 138586771, + "logo": null, + "name": "Passion selon saint Jean - J.S. Bach", + "subTopicIds": [ + 337184296, + 337184263, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586775": { + "description": null, + "id": 138586775, + "logo": null, + "name": "Yundi Li , piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586779": { + "description": null, + "id": 138586779, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586783": { + "description": null, + "id": 138586783, + "logo": null, + "name": "Orchestre Pasdeloup", + "subTopicIds": [ + 337184268, + 337184269, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586787": { + "description": null, + "id": 138586787, + "logo": null, + "name": "Orchestre du Conservatoire de Paris", + "subTopicIds": [ + 337184284, + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586795": { + "description": null, + "id": 138586795, + "logo": null, + "name": "Orchestre National d'Île-de-France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586799": { + "description": null, + "id": 138586799, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586803": { + "description": null, + "id": 138586803, + "logo": null, + "name": "Royal Concertgebouw Orchestra Amsterdam", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586807": { + "description": null, + "id": 138586807, + "logo": null, + "name": "Royal Concertgebouw Orchestra Amsterdam", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586811": { + "description": null, + "id": 138586811, + "logo": null, + "name": "Royal Concertgebouw Orchestra Amsterdam", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586815": { + "description": null, + "id": 138586815, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586823": { + "description": null, + "id": 138586823, + "logo": null, + "name": "London Symphony Orchestra", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586827": { + "description": null, + "id": 138586827, + "logo": null, + "name": "London Symphony Orchestra", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586831": { + "description": null, + "id": 138586831, + "logo": null, + "name": "Le Concert des Nations - Jordi Savall", + "subTopicIds": [ + 337184263, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586835": { + "description": null, + "id": 138586835, + "logo": null, + "name": "Leonidas Kavakos - Yuja Wang", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586839": { + "description": null, + "id": 138586839, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586843": { + "description": null, + "id": 138586843, + "logo": null, + "name": "Quatuor Artemis - Gautier Capuçon", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586847": { + "description": null, + "id": 138586847, + "logo": null, + "name": "Quatuor Artemis - Quatuor Ébène", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586851": { + "description": null, + "id": 138586851, + "logo": null, + "name": "Quatuor Artemis - Elisabeth Leonskaja", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586855": { + "description": null, + "id": 138586855, + "logo": null, + "name": "Russian National Orchestra", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586859": { + "description": null, + "id": 138586859, + "logo": null, + "name": "Passion selon saint Matthieu", + "subTopicIds": [ + 337184296, + 337184263, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586863": { + "description": null, + "id": 138586863, + "logo": null, + "name": "Les Arts Florissants - Concert de Pâques", + "subTopicIds": [ + 337184263, + 337184298, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586867": { + "description": null, + "id": 138586867, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586871": { + "description": null, + "id": 138586871, + "logo": null, + "name": "Leylâ et Majnûn ou L'Amour mystique", + "subTopicIds": [ + 337184279, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586875": { + "description": null, + "id": 138586875, + "logo": null, + "name": "Stephen Kovacevich, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586879": { + "description": null, + "id": 138586879, + "logo": null, + "name": "Orchestra Mozart Bologna - Mahler Chamber Orchestra", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586883": { + "description": null, + "id": 138586883, + "logo": null, + "name": "Ballet Royal du Cambodge", + "subTopicIds": [ + 337184279, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586889": { + "description": null, + "id": 138586889, + "logo": null, + "name": "MDR Sinfonieorchester Leipzig", + "subTopicIds": [ + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586893": { + "description": null, + "id": 138586893, + "logo": null, + "name": "Orchestre Colonne", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586897": { + "description": null, + "id": 138586897, + "logo": null, + "name": "Elisabeth Leonskaja, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586901": { + "description": null, + "id": 138586901, + "logo": null, + "name": "Yuja Wang, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586905": { + "description": null, + "id": 138586905, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586909": { + "description": null, + "id": 138586909, + "logo": null, + "name": "Anne-Sophie Mutter - Lambert Orkis", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586917": { + "description": null, + "id": 138586917, + "logo": null, + "name": "Orchestre National d'Île-de-France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586921": { + "description": null, + "id": 138586921, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586929": { + "description": null, + "id": 138586929, + "logo": null, + "name": "Orchestre Pasdeloup", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586933": { + "description": null, + "id": 138586933, + "logo": null, + "name": "Gilberto Gil", + "subTopicIds": [ + 337184279, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586937": { + "description": null, + "id": 138586937, + "logo": null, + "name": "Nelson Freire, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586941": { + "description": null, + "id": 138586941, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586945": { + "description": null, + "id": 138586945, + "logo": null, + "name": "Orfeo - C. Monteverdi (version de concert)", + "subTopicIds": [ + 337184284, + 337184263, + 337184298, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586949": { + "description": null, + "id": 138586949, + "logo": null, + "name": "Bamberger Symphoniker", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586953": { + "description": null, + "id": 138586953, + "logo": null, + "name": "Murray Perahia, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586957": { + "description": null, + "id": 138586957, + "logo": null, + "name": "Orchestre National du Capitole de Toulouse", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586961": { + "description": null, + "id": 138586961, + "logo": null, + "name": "Krystian Zimerman, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586965": { + "description": null, + "id": 138586965, + "logo": null, + "name": "Rafal Blechacz, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586969": { + "description": null, + "id": 138586969, + "logo": null, + "name": "Les Voyages musicaux de Marco Polo", + "subTopicIds": [ + 337184279, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586973": { + "description": null, + "id": 138586973, + "logo": null, + "name": "Orchestre National de Lyon", + "subTopicIds": [ + 337184298, + 337184268, + 337184283, + 337184292, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586977": { + "description": null, + "id": 138586977, + "logo": null, + "name": "Guy Braunstein - Zvi Plesser - Sunwook Kim", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586981": { + "description": null, + "id": 138586981, + "logo": null, + "name": "La Bohème - G. Puccini (version de concert)", + "subTopicIds": [ + 337184284, + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586989": { + "description": null, + "id": 138586989, + "logo": null, + "name": "Otello - G. Verdi (version de concert)", + "subTopicIds": [ + 337184284, + 337184298, + 337184268, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586993": { + "description": null, + "id": 138586993, + "logo": null, + "name": "Staatskapelle Berlin", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586997": { + "description": null, + "id": 138586997, + "logo": null, + "name": "Staatskapelle Berlin", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "151183114": { + "description": null, + "id": 151183114, + "logo": null, + "name": "San Francisco Symphony", + "subTopicIds": [ + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "339420802": { + "description": null, + "id": 339420802, + "logo": null, + "name": "Lou Doillon", + "subTopicIds": [ + 337184280, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "339420805": { + "description": null, + "id": 339420805, + "logo": null, + "name": "Patrick Watson & Orchestre National d'Ile-de-France", + "subTopicIds": [ + 337184280, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341069930": { + "description": null, + "id": 341069930, + "logo": "/images/UE0AAAAAFFRQagAAAAlDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181232": { + "description": null, + "id": 341181232, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181233": { + "description": null, + "id": 341181233, + "logo": "/images/UE0AAAAAFFYDMQAAAAhDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181234": { + "description": null, + "id": 341181234, + "logo": "/images/UE0AAAAAFFYDMgAAAAdDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181235": { + "description": null, + "id": 341181235, + "logo": "/images/UE0AAAAAFFYDMwAAAAZDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181236": { + "description": null, + "id": 341181236, + "logo": "/images/UE0AAAAAFFYDNAAAAAZDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181237": { + "description": null, + "id": 341181237, + "logo": "/images/UE0AAAAAFFYDNQAAAAhDSVRN", + "name": "Paavo Järvi, direction", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181238": { + "description": null, + "id": 341181238, + "logo": "/images/UE0AAAAAFFYDNgAAAAdDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181239": { + "description": null, + "id": 341181239, + "logo": "/images/UE0AAAAAFFYDNwAAAAdDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181240": { + "description": null, + "id": 341181240, + "logo": "/images/UE0AAAAAFFYDOAAAAAhDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181241": { + "description": null, + "id": 341181241, + "logo": "/images/UE0AAAAAFFYDOQAAAAZDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181242": { + "description": null, + "id": 341181242, + "logo": "/images/UE0AAAAAFFYDOgAAAAdDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181243": { + "description": null, + "id": 341181243, + "logo": "/images/UE0AAAAAFFYDOwAAAAdDSVRN", + "name": "Concert anniversaire des 90 ans de Menahem Pressler", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181244": { + "description": null, + "id": 341181244, + "logo": "/images/UE0AAAAAFFYDPAAAAAZDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181245": { + "description": null, + "id": 341181245, + "logo": "/images/UE0AAAAAFFYDPQAAAAZDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181246": { + "description": null, + "id": 341181246, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181247": { + "description": null, + "id": 341181247, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181248": { + "description": null, + "id": 341181248, + "logo": "/images/UE0AAAAAFFYDQAAAAAZDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181249": { + "description": null, + "id": 341181249, + "logo": "/images/UE0AAAAAFFYDQQAAAAdDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181250": { + "description": null, + "id": 341181250, + "logo": "/images/UE0AAAAAFFYDQgAAAAdDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181251": { + "description": null, + "id": 341181251, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181252": { + "description": null, + "id": 341181252, + "logo": "/images/UE0AAAAAFFYDRAAAAAdDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181253": { + "description": null, + "id": 341181253, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181254": { + "description": null, + "id": 341181254, + "logo": "/images/UE0AAAAAFFYDRgAAAAlDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181255": { + "description": null, + "id": 341181255, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181256": { + "description": null, + "id": 341181256, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181257": { + "description": null, + "id": 341181257, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181258": { + "description": null, + "id": 341181258, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181259": { + "description": null, + "id": 341181259, + "logo": null, + "name": "14052122 JARVI / GOERNE / SOLBERG / CHŒUR", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "342742592": { + "description": null, + "id": 342742592, + "logo": null, + "name": "event secret 2", + "subTopicIds": [], + "subjectCode": null, + "subtitle": null, + "topicIds": [] + }, + "342742593": { + "description": null, + "id": 342742593, + "logo": null, + "name": "event secret 3", + "subTopicIds": [], + "subjectCode": null, + "subtitle": null, + "topicIds": [] + }, + "342742594": { + "description": null, + "id": 342742594, + "logo": null, + "name": "event secret 4", + "subTopicIds": [], + "subjectCode": null, + "subtitle": null, + "topicIds": [] + }, + "342742595": { + "description": null, + "id": 342742595, + "logo": null, + "name": "event secret 5", + "subTopicIds": [], + "subjectCode": null, + "subtitle": null, + "topicIds": [] + }, + "342742596": { + "description": null, + "id": 342742596, + "logo": null, + "name": "event secret 6", + "subTopicIds": [], + "subjectCode": null, + "subtitle": null, + "topicIds": [] + } + }, + "performances": [ + { + "eventId": 138586341, + "id": 339887544, + "logo": null, + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937295 + }, + { + "amount": 66500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937296 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937295 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937296 + } + ], + "seatMapImage": null, + "start": 1372701600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 339420802, + "id": 339430296, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937295 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937296 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937295 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937296 + } + ], + "seatMapImage": null, + "start": 1372788000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 339420805, + "id": 339430301, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937295 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937296 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937295 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937296 + } + ], + "seatMapImage": null, + "start": 1373220000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586345, + "id": 138586347, + "logo": "/images/UE0AAAAACEKo6QAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 152000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 104500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1377972000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586349, + "id": 138586351, + "logo": "/images/UE0AAAAACEKo7QAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 152000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 104500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1378044000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586353, + "id": 138586355, + "logo": "/images/UE0AAAAACEKo8QAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1378490400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341069930, + "id": 341070133, + "logo": "/images/UE0AAAAAFFRQagAAAAlDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + } + ], + "seatMapImage": null, + "start": 1378922400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341069930, + "id": 341070132, + "logo": "/images/UE0AAAAAFFRQagAAAAlDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + } + ], + "seatMapImage": null, + "start": 1379008800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586357, + "id": 138586359, + "logo": "/images/UE0AAAAACEKo9QAAAAhDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1379095200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586361, + "id": 138586363, + "logo": "/images/UE0AAAAACEKo+QAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1379440800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586365, + "id": 138586367, + "logo": "/images/UE0AAAAACEKo/QAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1379959200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181254, + "id": 341181470, + "logo": "/images/UE0AAAAAFFYDRgAAAAlDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1380132000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181254, + "id": 341181469, + "logo": "/images/UE0AAAAAFFYDRgAAAAlDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1380218400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586369, + "id": 138586371, + "logo": "/images/UE0AAAAACEKpAQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1380650400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181252, + "id": 341181467, + "logo": "/images/UE0AAAAAFFYDRAAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1380736800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586373, + "id": 138586375, + "logo": "/images/UE0AAAAACEKpBQAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1380996000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586377, + "id": 138586379, + "logo": "/images/UE0AAAAACEKpCQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1381082400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586381, + "id": 138586383, + "logo": "/images/UE0AAAAACEKpDQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1381168800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586385, + "id": 138586387, + "logo": "/images/UE0AAAAACEKpEQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1381255200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181234, + "id": 341181437, + "logo": "/images/UE0AAAAAFFYDMgAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1381341600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181234, + "id": 341181436, + "logo": "/images/UE0AAAAAFFYDMgAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1381428000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586389, + "id": 138586391, + "logo": "/images/UE0AAAAACEKpFQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1381512600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586393, + "id": 138586395, + "logo": "/images/UE0AAAAACEKpGQAAAAhDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937241 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937242 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937244 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937245 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937246 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937241 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937242 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937244 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937245 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937246 + } + ], + "seatMapImage": null, + "start": 1381586400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586397, + "id": 138586399, + "logo": null, + "name": null, + "prices": [ + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1381672800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586401, + "id": 138586403, + "logo": "/images/UE0AAAAACEKpIQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1381773600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586405, + "id": 138586407, + "logo": "/images/UE0AAAAACEKpJQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1381860000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181233, + "id": 341181435, + "logo": "/images/UE0AAAAAFFYDMQAAAAhDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1381946400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181237, + "id": 341181442, + "logo": "/images/UE0AAAAAFFYDNQAAAAhDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1382032800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586409, + "id": 138586411, + "logo": "/images/UE0AAAAACEKpKQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1382119200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586413, + "id": 138586415, + "logo": "/images/UE0AAAAACEKpLQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1382277600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586417, + "id": 138586419, + "logo": "/images/UE0AAAAACEKpMQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1382378400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586421, + "id": 138586423, + "logo": "/images/UE0AAAAACEKpNQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1382464800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181238, + "id": 341181444, + "logo": "/images/UE0AAAAAFFYDNgAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1382551200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181238, + "id": 341181443, + "logo": "/images/UE0AAAAAFFYDNgAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1382637600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586425, + "id": 138586427, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937235 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937236 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937238 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937239 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937240 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937235 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937236 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937238 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937239 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937240 + } + ], + "seatMapImage": null, + "start": 1382724000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586429, + "id": 138586431, + "logo": "/images/UE0AAAAACEKpPQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1382810400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586433, + "id": 138586435, + "logo": "/images/UE0AAAAACEKpQQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1382886000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586437, + "id": 138586439, + "logo": "/images/UE0AAAAACEKpRQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1383073200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586441, + "id": 138586443, + "logo": "/images/UE0AAAAACEKpSQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1383246000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586445, + "id": 138586447, + "logo": "/images/UE0AAAAACEKpTQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1383332400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586449, + "id": 138586451, + "logo": "/images/UE0AAAAACEKpUQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1383418800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742708, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383555600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742709, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383562800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586453, + "id": 138586455, + "logo": "/images/UE0AAAAACEKpVQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937295 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937296 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937295 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937296 + } + ], + "seatMapImage": null, + "start": 1383591600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742710, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383642000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742711, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383649200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742712, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383728400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742713, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383735600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742714, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383814800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742715, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383822000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586457, + "id": 138586459, + "logo": "/images/UE0AAAAACEKpWQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1383850800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586461, + "id": 138586463, + "logo": "/images/UE0AAAAACEKpXQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1383937200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586465, + "id": 138586467, + "logo": "/images/UE0AAAAACEKpYQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1384110000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586469, + "id": 138586471, + "logo": "/images/UE0AAAAACEKpZQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937289 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937290 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937292 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937293 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937289 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937290 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937292 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937293 + } + ], + "seatMapImage": null, + "start": 1384196400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586473, + "id": 138586475, + "logo": "/images/UE0AAAAACEKpaQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1384282800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586477, + "id": 138586479, + "logo": "/images/UE0AAAAACEKpbQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1384369200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586481, + "id": 138586483, + "logo": "/images/UE0AAAAACEKpcQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1384455600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586485, + "id": 138586487, + "logo": "/images/UE0AAAAACEKpdQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1384542000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586501, + "id": 138586503, + "logo": "/images/UE0AAAAACEKphQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1384801200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586505, + "id": 138586507, + "logo": "/images/UE0AAAAACEKpiQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1384887600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586509, + "id": 138586511, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937235 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937236 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937238 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937239 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937240 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937235 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937236 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937238 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937239 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937240 + } + ], + "seatMapImage": null, + "start": 1385146800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586513, + "id": 138586515, + "logo": "/images/UE0AAAAACEKpkQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1385231400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586517, + "id": 138586519, + "logo": "/images/UE0AAAAACEKplQAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1385305200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586521, + "id": 138586523, + "logo": "/images/UE0AAAAACEKpmQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 152000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 104500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1385492400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181235, + "id": 341181439, + "logo": "/images/UE0AAAAAFFYDMwAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1385665200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586525, + "id": 138586527, + "logo": "/images/UE0AAAAACEKpnQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1385751600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586529, + "id": 138586531, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937241 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937242 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937244 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937245 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937246 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937241 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937242 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937244 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937245 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937246 + } + ], + "seatMapImage": null, + "start": 1385823600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181235, + "id": 341181438, + "logo": "/images/UE0AAAAAFFYDMwAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1385838000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586533, + "id": 138586535, + "logo": "/images/UE0AAAAACEKppQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1385910000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586537, + "id": 138586539, + "logo": "/images/UE0AAAAACEKpqQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1386010800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586541, + "id": 138586543, + "logo": "/images/UE0AAAAACEKprQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1386097200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181236, + "id": 341181440, + "logo": "/images/UE0AAAAAFFYDNAAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1386183600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181236, + "id": 341181441, + "logo": "/images/UE0AAAAAFFYDNAAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1386270000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586545, + "id": 138586547, + "logo": "/images/UE0AAAAACEKpsQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 104500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1386356400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586549, + "id": 138586551, + "logo": "/images/UE0AAAAACEKptQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1386428400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586553, + "id": 138586555, + "logo": "/images/UE0AAAAACEKpuQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1386442800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586557, + "id": 138586559, + "logo": "/images/UE0AAAAACEKpvQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1386514800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742716, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386579600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742717, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386586800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586561, + "id": 138586563, + "logo": "/images/UE0AAAAACEKpwQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1386615600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742718, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386666000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742719, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386673200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586565, + "id": 138586567, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1386702000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742720, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386752400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742721, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386759600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181241, + "id": 341181449, + "logo": "/images/UE0AAAAAFFYDOQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1386788400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742722, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386838800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742723, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386846000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181241, + "id": 341181450, + "logo": "/images/UE0AAAAAFFYDOQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1386874800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586569, + "id": 138586571, + "logo": "/images/UE0AAAAACEKpyQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1386961200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742724, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387184400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742725, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387191600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586581, + "id": 138586583, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264860 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264861 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264863 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264864 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264860 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264861 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264863 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264864 + } + ], + "seatMapImage": null, + "start": 1387220400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742726, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387270800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742727, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387278000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586585, + "id": 138586587, + "logo": "/images/UE0AAAAACEKp2QAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1387306800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742728, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387357200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742729, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387364400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181250, + "id": 341181465, + "logo": "/images/UE0AAAAAFFYDQgAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1387393200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742730, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387443600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742731, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387450800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586589, + "id": 138586591, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1387566000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586593, + "id": 138586595, + "logo": "/images/UE0AAAAACEKp4QAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937235 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937236 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937238 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937239 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937240 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937235 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937236 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937238 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937239 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937240 + } + ], + "seatMapImage": null, + "start": 1387724400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742732, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387789200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742733, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387796400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742734, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387875600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742735, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387882800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742736, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387962000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742737, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387969200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742738, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1388048400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742739, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1388055600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742740, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1388998800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742741, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1389006000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742742, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1389085200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742743, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1389092400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742744, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1389171600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742745, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1389178800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181245, + "id": 341181458, + "logo": "/images/UE0AAAAAFFYDPQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1389207600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742746, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1389258000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742747, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1389265200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181245, + "id": 341181457, + "logo": "/images/UE0AAAAAFFYDPQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1389294000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586597, + "id": 138586599, + "logo": "/images/UE0AAAAACEKp5QAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1389380400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586601, + "id": 138586603, + "logo": "/images/UE0AAAAACEKp6QAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937241 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937242 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937244 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937245 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937246 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937241 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937242 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937244 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937245 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937246 + } + ], + "seatMapImage": null, + "start": 1389452400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586605, + "id": 138586607, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1389538800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586609, + "id": 138586611, + "logo": null, + "name": null, + "prices": [ + { + "amount": 15000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937314 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937314 + } + ], + "seatMapImage": null, + "start": 1389726000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181242, + "id": 341181451, + "logo": "/images/UE0AAAAAFFYDOgAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1389812400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181242, + "id": 341181452, + "logo": "/images/UE0AAAAAFFYDOgAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1389898800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586613, + "id": 138586615, + "logo": "/images/UE0AAAAACEKp9QAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086215 + } + ], + "seatMapImage": null, + "start": 1389985200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586617, + "id": 138586619, + "logo": "/images/UE0AAAAACEKp+QAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1390071600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586625, + "id": 138586627, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937235 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937236 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937238 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937239 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937240 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937235 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937236 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937238 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937239 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937240 + } + ], + "seatMapImage": null, + "start": 1390143600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586629, + "id": 138586631, + "logo": "/images/UE0AAAAACEKqBQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937271 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937272 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937274 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937275 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937271 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937272 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937274 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937275 + } + ], + "seatMapImage": null, + "start": 1390159800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181239, + "id": 341181446, + "logo": "/images/UE0AAAAAFFYDNwAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1390417200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181239, + "id": 341181445, + "logo": "/images/UE0AAAAAFFYDNwAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1390503600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586633, + "id": 138586635, + "logo": "/images/UE0AAAAACEKqCQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1390590000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586641, + "id": 138586643, + "logo": "/images/UE0AAAAACEKqEQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1390676400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586645, + "id": 138586647, + "logo": "/images/UE0AAAAACEKqFQAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937235 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937236 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937238 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937239 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937240 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937235 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937236 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937238 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937239 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937240 + } + ], + "seatMapImage": null, + "start": 1390748400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586649, + "id": 138586651, + "logo": "/images/UE0AAAAACEKqGQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1390849200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586653, + "id": 138586655, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1390935600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181243, + "id": 341181453, + "logo": "/images/UE0AAAAAFFYDOwAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1391022000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181243, + "id": 341181454, + "logo": "/images/UE0AAAAAFFYDOwAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1391108400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586657, + "id": 138586659, + "logo": "/images/UE0AAAAACEKqIQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1391194800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586661, + "id": 138586663, + "logo": null, + "name": null, + "prices": [ + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1391353200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586661, + "id": 138586665, + "logo": null, + "name": null, + "prices": [ + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1391367600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586667, + "id": 138586669, + "logo": null, + "name": null, + "prices": [ + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937295 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937296 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937295 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937296 + } + ], + "seatMapImage": null, + "start": 1391540400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586671, + "id": 138586673, + "logo": "/images/UE0AAAAACEKqLwAAAAlDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937289 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937290 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937292 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937293 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937289 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937290 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937292 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937293 + } + ], + "seatMapImage": null, + "start": 1391626800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586675, + "id": 138586677, + "logo": "/images/UE0AAAAACEKqMwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1391713200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586679, + "id": 138586681, + "logo": "/images/UE0AAAAACEKqNwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1391799600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586687, + "id": 138586689, + "logo": "/images/UE0AAAAACEKqPwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1391886000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586691, + "id": 138586693, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1391958000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586695, + "id": 138586697, + "logo": "/images/UE0AAAAACEKqRwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1392145200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181240, + "id": 341181448, + "logo": "/images/UE0AAAAAFFYDOAAAAAhDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1392231600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181240, + "id": 341181447, + "logo": "/images/UE0AAAAAFFYDOAAAAAhDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1392318000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586699, + "id": 138586701, + "logo": null, + "name": null, + "prices": [ + { + "amount": 15000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264872 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264872 + } + ], + "seatMapImage": null, + "start": 1392404400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586703, + "id": 138586705, + "logo": "/images/UE0AAAAACEKqTwAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1392490800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586707, + "id": 138586709, + "logo": "/images/UE0AAAAACEKqUwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1392562800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586711, + "id": 138586713, + "logo": "/images/UE0AAAAACEKqVwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1392663600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586715, + "id": 138586717, + "logo": "/images/UE0AAAAACEKqWwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1392750000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181248, + "id": 341181462, + "logo": "/images/UE0AAAAAFFYDQAAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1392836400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586719, + "id": 138586721, + "logo": "/images/UE0AAAAACEKqXwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1393095600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586723, + "id": 138586729, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937307 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937308 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937310 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937311 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937312 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937307 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937308 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937310 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937311 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937312 + } + ], + "seatMapImage": null, + "start": 1393678800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586723, + "id": 138586725, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937307 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937308 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937310 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937311 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937312 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937307 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937308 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937310 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937311 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937312 + } + ], + "seatMapImage": null, + "start": 1393693200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586723, + "id": 138586727, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937307 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937308 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937310 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937311 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937312 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937307 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937308 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937310 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937311 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937312 + } + ], + "seatMapImage": null, + "start": 1393754400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586731, + "id": 138586733, + "logo": "/images/UE0AAAAACEKqawAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1393959600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181249, + "id": 341181463, + "logo": "/images/UE0AAAAAFFYDQQAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1394046000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181249, + "id": 341181464, + "logo": "/images/UE0AAAAAFFYDQQAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1394132400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586735, + "id": 138586737, + "logo": "/images/UE0AAAAACEKqbwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1394218800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586743, + "id": 138586745, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1394305200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586747, + "id": 138586749, + "logo": "/images/UE0AAAAACEKqewAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1394377200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586751, + "id": 138586753, + "logo": "/images/UE0AAAAACEKqfwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1394478000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181244, + "id": 341181455, + "logo": "/images/UE0AAAAAFFYDPAAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1394650800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181244, + "id": 341181456, + "logo": "/images/UE0AAAAAFFYDPAAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1394737200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586755, + "id": 138586757, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264866 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264867 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264869 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264870 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264866 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264867 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264869 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264870 + } + ], + "seatMapImage": null, + "start": 1394823600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586759, + "id": 138586761, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1395082800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 151183114, + "id": 151183116, + "logo": null, + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937289 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937290 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937292 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937293 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937289 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937290 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937292 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937293 + } + ], + "seatMapImage": null, + "start": 1395169200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586771, + "id": 138586773, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1395255600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586775, + "id": 138586777, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1395342000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586779, + "id": 138586781, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1395428400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586783, + "id": 138586785, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937241 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937242 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937244 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937245 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937246 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937241 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937242 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937244 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937245 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937246 + } + ], + "seatMapImage": null, + "start": 1395500400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586787, + "id": 138586789, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1395514800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586795, + "id": 138586797, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937235 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937236 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937238 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937239 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937240 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937235 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937236 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937238 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937239 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937240 + } + ], + "seatMapImage": null, + "start": 1395586800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181246, + "id": 341181459, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1395860400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181246, + "id": 341181460, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1395946800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586799, + "id": 138586801, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1396033200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586803, + "id": 138586805, + "logo": null, + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1396191600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586807, + "id": 138586809, + "logo": null, + "name": null, + "prices": [ + { + "amount": 104500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1396288800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586811, + "id": 138586813, + "logo": null, + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1396375200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181255, + "id": 341181472, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1396461600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181255, + "id": 341181471, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1396548000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586815, + "id": 138586817, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1396634400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586823, + "id": 138586825, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1396720800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586827, + "id": 138586829, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1396792800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586831, + "id": 138586833, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1396893600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586835, + "id": 138586837, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1396980000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181256, + "id": 341181473, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1397066400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181256, + "id": 341181474, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1397152800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586839, + "id": 138586841, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264866 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264867 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264869 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264870 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264866 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264867 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264869 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264870 + } + ], + "seatMapImage": null, + "start": 1397239200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586843, + "id": 138586845, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1397311200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586847, + "id": 138586849, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1397325600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586851, + "id": 138586853, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1397397600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586855, + "id": 138586857, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1397498400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586859, + "id": 138586861, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1397584800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586863, + "id": 138586865, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1397930400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181251, + "id": 341181466, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1398276000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181253, + "id": 341181468, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1398362400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586867, + "id": 138586869, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1398448800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586871, + "id": 138586873, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1398607200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586875, + "id": 138586877, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1398708000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586879, + "id": 138586881, + "logo": null, + "name": null, + "prices": [ + { + "amount": 171000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 123500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 66500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1398794400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586883, + "id": 138586887, + "logo": null, + "name": null, + "prices": [ + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1399125600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586883, + "id": 138586885, + "logo": null, + "name": null, + "prices": [ + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1399140000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586889, + "id": 138586891, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937307 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937308 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937310 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937311 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937307 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937308 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937310 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937311 + } + ], + "seatMapImage": null, + "start": 1399312800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586893, + "id": 138586895, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1399399200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181232, + "id": 341181434, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1399485600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586897, + "id": 138586899, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1399917600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586901, + "id": 138586903, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1400176800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586905, + "id": 138586907, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1400263200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586909, + "id": 138586911, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1400349600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586917, + "id": 138586919, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937235 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937236 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937238 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937239 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937240 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937235 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937236 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937238 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937239 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937240 + } + ], + "seatMapImage": null, + "start": 1400421600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181259, + "id": 341181480, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + } + ], + "seatMapImage": null, + "start": 1400695200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181259, + "id": 341181479, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + } + ], + "seatMapImage": null, + "start": 1400781600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586921, + "id": 138586923, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1400868000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586929, + "id": 138586931, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937241 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937242 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937244 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937245 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937246 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937241 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937242 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937244 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937245 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937246 + } + ], + "seatMapImage": null, + "start": 1400940000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586933, + "id": 138586935, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1401026400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586937, + "id": 138586939, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1401127200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586941, + "id": 138586943, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264860 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264861 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264863 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264864 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264860 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264861 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264863 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264864 + } + ], + "seatMapImage": null, + "start": 1401472800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586945, + "id": 138586947, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1401730200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586949, + "id": 138586951, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1401818400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586953, + "id": 138586955, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1401904800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586957, + "id": 138586959, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1401991200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586961, + "id": 138586963, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1402077600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586965, + "id": 138586967, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1402423200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181258, + "id": 341181477, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1402509600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181258, + "id": 341181478, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1402596000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586969, + "id": 138586971, + "logo": null, + "name": null, + "prices": [ + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1402768800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586973, + "id": 138586975, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1402840800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586977, + "id": 138586979, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1402941600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586981, + "id": 138586983, + "logo": null, + "name": null, + "prices": [ + { + "amount": 123500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937289 + }, + { + "amount": 85500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937290 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937292 + }, + { + "amount": 38000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937293 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937294 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937289 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937290 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937292 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937293 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937294 + } + ], + "seatMapImage": null, + "start": 1403028000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181257, + "id": 341181475, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1403114400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181257, + "id": 341181476, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1403200800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181247, + "id": 341181461, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1403719200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586989, + "id": 138586991, + "logo": null, + "name": null, + "prices": [ + { + "amount": 152000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 104500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1403892000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586993, + "id": 138586995, + "logo": null, + "name": null, + "prices": [ + { + "amount": 123500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 85500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 38000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1404324000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586997, + "id": 138586999, + "logo": null, + "name": null, + "prices": [ + { + "amount": 123500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 85500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 38000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1404410400000, + "venueCode": "PLEYEL_PLEYEL" + } + ], + "seatCategoryNames": { + "338937235": "1ère catégorie", + "338937236": "2ème catégorie", + "338937238": "3ème catégorie", + "338937239": "4ème catégorie", + "338937240": "5ème catégorie", + "338937241": "1ère catégorie", + "338937242": "2ème catégorie", + "338937244": "3ème catégorie", + "338937245": "4ème catégorie", + "338937246": "5ème catégorie", + "338937271": "1ère catégorie", + "338937272": "2ème catégorie", + "338937274": "3ème catégorie", + "338937275": "4ème catégorie", + "338937277": "1ère catégorie", + "338937278": "2ème catégorie", + "338937280": "3ème catégorie", + "338937281": "4ème catégorie", + "338937282": "5ème catégorie", + "338937283": "5ème catégorie", + "338937284": "1ère catégorie", + "338937285": "2ème catégorie", + "338937287": "3ème catégorie", + "338937288": "4ème catégorie", + "338937289": "1ère catégorie", + "338937290": "2ème catégorie", + "338937292": "3ème catégorie", + "338937293": "4ème catégorie", + "338937294": "5ème catégorie", + "338937295": "1ère catégorie", + "338937296": "2ème catégorie", + "338937307": "1ère catégorie", + "338937308": "2ème catégorie", + "338937310": "3ème catégorie", + "338937311": "4ème catégorie", + "338937312": "5ème catégorie", + "338937314": "Catégorie unique", + "339086196": "1ère catégorie", + "339086197": "2ème catégorie", + "339086210": "1ère catégorie", + "339086211": "2ème catégorie", + "339086213": "3ème catégorie", + "339086214": "4ème catégorie", + "339086215": "5ème catégorie", + "340826015": "Catégorie 3", + "340826016": "Catégorie 1", + "340826017": "Catégorie 2", + "340826018": "Catégorie 4", + "340826019": "Catégorie 5", + "341179212": "CAT1", + "341179213": "CAT2", + "341179214": "CAT3", + "341179215": "CAT4", + "341179216": "CAT5", + "341264860": "1ère catégorie", + "341264861": "2ème catégorie", + "341264863": "3ème catégorie", + "341264864": "4ème catégorie", + "341264866": "1ère catégorie", + "341264867": "2ème catégorie", + "341264869": "3ème catégorie", + "341264870": "4ème catégorie", + "341264872": "1ère catégorie", + "342752792": "catétgorie unique" + }, + "subTopicNames": { + "337184262": "Musique amplifiée", + "337184263": "Musique baroque", + "337184267": "Ciné-concert", + "337184268": "Musique classique", + "337184269": "Jazz", + "337184273": "Musique de chambre", + "337184275": "Musique dirigée", + "337184279": "Musique du monde", + "337184280": "Pop/rock", + "337184281": "Musique de chambre", + "337184282": "Famille", + "337184283": "Concert", + "337184284": "Opéra (version de concert)", + "337184288": "Musique contemporaine", + "337184292": "Musique vocale", + "337184296": "Musique ancienne", + "337184297": "Chanson", + "337184298": "Voix", + "337184299": "famille" + }, + "subjectNames": {}, + "topicNames": { + "107888604": "Activité", + "324846098": "Type de public", + "324846099": "Genre", + "324846100": "Formations musicales" + }, + "topicSubTopics": { + "107888604": [ + 337184283, + 337184267 + ], + "324846098": [ + 337184299 + ], + "324846099": [ + 337184268, + 337184288, + 337184284, + 337184263, + 337184298, + 337184269, + 337184280, + 337184297, + 337184281, + 337184296, + 337184279 + ], + "324846100": [ + 337184275, + 337184262, + 337184292, + 337184273, + 337184282 + ] + }, + "venueNames": { + "PLEYEL_PLEYEL": "Salle Pleyel" + } +} \ No newline at end of file diff --git a/tool/benchmark/cases/citm_catalog.yml b/tool/benchmark/cases/citm_catalog.yml new file mode 100644 index 00000000..1d81012d --- /dev/null +++ b/tool/benchmark/cases/citm_catalog.yml @@ -0,0 +1,27035 @@ +areaNames: + '205705993': Arrière-scène central + '205705994': 1er balcon central + '205705995': 2ème balcon bergerie cour + '205705996': 2ème balcon bergerie jardin + '205705998': 1er balcon bergerie jardin + '205705999': 1er balcon bergerie cour + '205706000': Arrière-scène jardin + '205706001': Arrière-scène cour + '205706002': 2ème balcon jardin + '205706003': 2ème balcon cour + '205706004': 2ème Balcon central + '205706005': 1er balcon jardin + '205706006': 1er balcon cour + '205706007': Orchestre central + '205706008': Orchestre jardin + '205706009': Orchestre cour + '342752287': Zone physique secrète +audienceSubCategoryNames: + '337100890': Abonné +blockNames: {} +events: + '138586341': + description: null + id: 138586341 + logo: null + name: 30th Anniversary Tour + subTopicIds: + - 337184269 + - 337184283 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + '138586345': + description: null + id: 138586345 + logo: /images/UE0AAAAACEKo6QAAAAZDSVRN + name: Berliner Philharmoniker + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586349': + description: null + id: 138586349 + logo: /images/UE0AAAAACEKo7QAAAAZDSVRN + name: Berliner Philharmoniker + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586353': + description: null + id: 138586353 + logo: /images/UE0AAAAACEKo8QAAAAZDSVRN + name: Pittsburgh Symphony Orchestra + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586357': + description: null + id: 138586357 + logo: /images/UE0AAAAACEKo9QAAAAhDSVRN + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586361': + description: null + id: 138586361 + logo: /images/UE0AAAAACEKo+QAAAAVDSVRN + name: WDR Sinfonieorchester Köln + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586365': + description: null + id: 138586365 + logo: /images/UE0AAAAACEKo/QAAAAVDSVRN + name: Alessandro - G.F. Haendel + subTopicIds: + - 337184284 + - 337184263 + - 337184298 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586369': + description: null + id: 138586369 + logo: /images/UE0AAAAACEKpAQAAAAVDSVRN + name: Orchestre Colonne + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586373': + description: null + id: 138586373 + logo: /images/UE0AAAAACEKpBQAAAAdDSVRN + name: Christophe + subTopicIds: + - 337184280 + - 337184297 + - 337184283 + - 337184262 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586377': + description: null + id: 138586377 + logo: /images/UE0AAAAACEKpCQAAAAVDSVRN + name: Joshua Redman Quartet + subTopicIds: + - 337184269 + - 337184283 + - 337184262 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586381': + description: null + id: 138586381 + logo: /images/UE0AAAAACEKpDQAAAAVDSVRN + name: Orchestre Symphonique d'Etat de São Paulo + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586385': + description: null + id: 138586385 + logo: /images/UE0AAAAACEKpEQAAAAVDSVRN + name: Le génie italien + subTopicIds: + - 337184284 + - 337184298 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586389': + description: null + id: 138586389 + logo: /images/UE0AAAAACEKpFQAAAAVDSVRN + name: Les Noces de Figaro - W.A. Mozart (version de concert) + subTopicIds: + - 337184284 + - 337184298 + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586393': + description: null + id: 138586393 + logo: /images/UE0AAAAACEKpGQAAAAhDSVRN + name: Orchestre Pasdeloup + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586397': + description: null + id: 138586397 + logo: null + name: The Saxophone Summit + subTopicIds: + - 337184269 + - 337184283 + - 337184262 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586401': + description: null + id: 138586401 + logo: /images/UE0AAAAACEKpIQAAAAVDSVRN + name: Patricia Petibon - Nouveau Monde + subTopicIds: + - 337184263 + - 337184298 + - 337184283 + - 337184292 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586405': + description: null + id: 138586405 + logo: /images/UE0AAAAACEKpJQAAAAVDSVRN + name: Russian National Orchestra + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586409': + description: null + id: 138586409 + logo: /images/UE0AAAAACEKpKQAAAAZDSVRN + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586413': + description: null + id: 138586413 + logo: /images/UE0AAAAACEKpLQAAAAVDSVRN + name: Evgeny Kissin + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586417': + description: null + id: 138586417 + logo: /images/UE0AAAAACEKpMQAAAAZDSVRN + name: 'Bach, concertos pour piano' + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586421': + description: null + id: 138586421 + logo: /images/UE0AAAAACEKpNQAAAAVDSVRN + name: 'Bach, concertos pour piano' + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586425': + description: null + id: 138586425 + logo: null + name: Orchestre National d'Île-de-France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586429': + description: null + id: 138586429 + logo: /images/UE0AAAAACEKpPQAAAAVDSVRN + name: Gewandhausorchester Leipzig + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586433': + description: null + id: 138586433 + logo: /images/UE0AAAAACEKpQQAAAAVDSVRN + name: Gewandhausorchester Leipzig + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586437': + description: null + id: 138586437 + logo: /images/UE0AAAAACEKpRQAAAAVDSVRN + name: Budapest Festival Orchestra + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586441': + description: null + id: 138586441 + logo: /images/UE0AAAAACEKpSQAAAAVDSVRN + name: Orchestre National du Capitole de Toulouse + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586445': + description: null + id: 138586445 + logo: /images/UE0AAAAACEKpTQAAAAVDSVRN + name: Gewandhausorchester Leipzig + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586449': + description: null + id: 138586449 + logo: /images/UE0AAAAACEKpUQAAAAVDSVRN + name: Gewandhausorchester Leipzig + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586453': + description: null + id: 138586453 + logo: /images/UE0AAAAACEKpVQAAAAVDSVRN + name: Remember Shakti + subTopicIds: + - 337184269 + - 337184283 + - 337184262 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586457': + description: null + id: 138586457 + logo: /images/UE0AAAAACEKpWQAAAAVDSVRN + name: Menahem Pressler - Quatuor Ebène + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586461': + description: null + id: 138586461 + logo: /images/UE0AAAAACEKpXQAAAAZDSVRN + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586465': + description: null + id: 138586465 + logo: /images/UE0AAAAACEKpYQAAAAVDSVRN + name: Orquesta Buena Vista Social Club + subTopicIds: + - 337184279 + - 337184283 + - 337184262 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586469': + description: null + id: 138586469 + logo: /images/UE0AAAAACEKpZQAAAAVDSVRN + name: The Cleveland Orchestra + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586473': + description: null + id: 138586473 + logo: /images/UE0AAAAACEKpaQAAAAVDSVRN + name: The Cleveland Orchestra + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586477': + description: null + id: 138586477 + logo: /images/UE0AAAAACEKpbQAAAAZDSVRN + name: Orchestre Philharmonique du Luxembourg + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586481': + description: null + id: 138586481 + logo: /images/UE0AAAAACEKpcQAAAAVDSVRN + name: 'Maurizio Pollini, piano' + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586485': + description: null + id: 138586485 + logo: /images/UE0AAAAACEKpdQAAAAZDSVRN + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586501': + description: null + id: 138586501 + logo: /images/UE0AAAAACEKphQAAAAVDSVRN + name: Antonio Meneses - Maria-João Pires + subTopicIds: + - 337184268 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586505': + description: null + id: 138586505 + logo: /images/UE0AAAAACEKpiQAAAAVDSVRN + name: Musiques pour la reine Caroline + subTopicIds: + - 337184284 + - 337184263 + - 337184298 + - 337184283 + - 337184292 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586509': + description: null + id: 138586509 + logo: null + name: Orchestre National d'Île-de-France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586513': + description: null + id: 138586513 + logo: /images/UE0AAAAACEKpkQAAAAVDSVRN + name: Les Mystères d'Isis - W.A. Mozart (cersion de concert) + subTopicIds: + - 337184284 + - 337184298 + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586517': + description: null + id: 138586517 + logo: /images/UE0AAAAACEKplQAAAAdDSVRN + name: Martha Argerich - Gidon Kremer + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586521': + description: null + id: 138586521 + logo: /images/UE0AAAAACEKpmQAAAAVDSVRN + name: Cecilia Bartoli - Mozart et la Vienne classique + subTopicIds: + - 337184298 + - 337184268 + - 337184283 + - 337184292 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586525': + description: null + id: 138586525 + logo: /images/UE0AAAAACEKpnQAAAAVDSVRN + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586529': + description: null + id: 138586529 + logo: null + name: Orchestre Pasdeloup + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586533': + description: null + id: 138586533 + logo: /images/UE0AAAAACEKppQAAAAVDSVRN + name: Orchestre du Théâtre Mariinsky + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586537': + description: null + id: 138586537 + logo: /images/UE0AAAAACEKpqQAAAAVDSVRN + name: Orchestre du Théâtre Mariinsky + subTopicIds: + - 337184298 + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586541': + description: null + id: 138586541 + logo: /images/UE0AAAAACEKprQAAAAVDSVRN + name: Orchestre du Théâtre Mariinsky + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586545': + description: null + id: 138586545 + logo: /images/UE0AAAAACEKpsQAAAAVDSVRN + name: Academy of Saint Martin in the Fields + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586549': + description: null + id: 138586549 + logo: /images/UE0AAAAACEKptQAAAAVDSVRN + name: Quatuor Hagen + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586553': + description: null + id: 138586553 + logo: /images/UE0AAAAACEKpuQAAAAVDSVRN + name: Quatuor Hagen + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586557': + description: null + id: 138586557 + logo: /images/UE0AAAAACEKpvQAAAAVDSVRN + name: Quatuor Hagen + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586561': + description: null + id: 138586561 + logo: /images/UE0AAAAACEKpwQAAAAVDSVRN + name: 'Sunwook Kim, piano' + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586565': + description: null + id: 138586565 + logo: null + name: Orchestre Colonne + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586569': + description: null + id: 138586569 + logo: /images/UE0AAAAACEKpyQAAAAVDSVRN + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586581': + description: null + id: 138586581 + logo: null + name: Orchestre National de France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586585': + description: null + id: 138586585 + logo: /images/UE0AAAAACEKp2QAAAAVDSVRN + name: Messe en si mineur - J.S. Bach + subTopicIds: + - 337184296 + - 337184263 + - 337184298 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586589': + description: null + id: 138586589 + logo: null + name: Le Messie - G.F. Haendel + subTopicIds: + - 337184263 + - 337184298 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586593': + description: null + id: 138586593 + logo: /images/UE0AAAAACEKp4QAAAAdDSVRN + name: Orchestre National d'Île-de-France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586597': + description: null + id: 138586597 + logo: /images/UE0AAAAACEKp5QAAAAVDSVRN + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586601': + description: null + id: 138586601 + logo: /images/UE0AAAAACEKp6QAAAAdDSVRN + name: Orchestre Pasdeloup + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586605': + description: null + id: 138586605 + logo: null + name: Orchestre Colonne + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586609': + description: null + id: 138586609 + logo: null + name: Ciné-concert - Le Cuirassé Potemkine + subTopicIds: + - 337184267 + - 337184262 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 107888604 + - 324846100 + '138586613': + description: null + id: 138586613 + logo: /images/UE0AAAAACEKp9QAAAAVDSVRN + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586617': + description: null + id: 138586617 + logo: /images/UE0AAAAACEKp+QAAAAVDSVRN + name: London Symphony Orchestra + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586625': + description: null + id: 138586625 + logo: null + name: Orchestre National d'Île-de-France + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586629': + description: null + id: 138586629 + logo: /images/UE0AAAAACEKqBQAAAAVDSVRN + name: Orquesta Sinfonica Simón Bolívar de Venezuela + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586633': + description: null + id: 138586633 + logo: /images/UE0AAAAACEKqCQAAAAVDSVRN + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184298 + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586641': + description: null + id: 138586641 + logo: /images/UE0AAAAACEKqEQAAAAVDSVRN + name: Edita Gruberova - Airs de concert + subTopicIds: + - 337184284 + - 337184298 + - 337184283 + - 337184292 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586645': + description: null + id: 138586645 + logo: /images/UE0AAAAACEKqFQAAAAdDSVRN + name: Orchestre National d'Île-de-France + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586649': + description: null + id: 138586649 + logo: /images/UE0AAAAACEKqGQAAAAZDSVRN + name: 'Alexei Volodin, piano' + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586653': + description: null + id: 138586653 + logo: null + name: Sonya Yoncheva - Diva ! + subTopicIds: + - 337184284 + - 337184263 + - 337184298 + - 337184283 + - 337184292 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586657': + description: null + id: 138586657 + logo: /images/UE0AAAAACEKqIQAAAAVDSVRN + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586661': + description: null + id: 138586661 + logo: null + name: Le Ramayana balinais - L'Enlèvement de Sita + subTopicIds: + - 337184279 + - 337184283 + - 337184262 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586667': + description: null + id: 138586667 + logo: null + name: Dave Holland & friends + subTopicIds: + - 337184269 + - 337184283 + - 337184262 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586671': + description: null + id: 138586671 + logo: /images/UE0AAAAACEKqLwAAAAlDSVRN + name: Boris Godounov - M.Moussorgski (version de concert) + subTopicIds: + - 337184284 + - 337184298 + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586675': + description: null + id: 138586675 + logo: /images/UE0AAAAACEKqMwAAAAVDSVRN + name: Insula orchestra - Accentus + subTopicIds: + - 337184298 + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586679': + description: null + id: 138586679 + logo: /images/UE0AAAAACEKqNwAAAAVDSVRN + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586687': + description: null + id: 138586687 + logo: /images/UE0AAAAACEKqPwAAAAVDSVRN + name: Bryn Terfel - Héros légendaires + subTopicIds: + - 337184284 + - 337184298 + - 337184283 + - 337184292 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586691': + description: null + id: 138586691 + logo: null + name: Les Siècles + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586695': + description: null + id: 138586695 + logo: /images/UE0AAAAACEKqRwAAAAVDSVRN + name: Gautier Capuçon - Frank Braley + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586699': + description: null + id: 138586699 + logo: null + name: Festival Présences 2014 "Paris Berlin" + subTopicIds: + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586703': + description: null + id: 138586703 + logo: /images/UE0AAAAACEKqTwAAAAZDSVRN + name: Autour de Tristan + subTopicIds: + - 337184284 + - 337184298 + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586707': + description: null + id: 138586707 + logo: /images/UE0AAAAACEKqUwAAAAVDSVRN + name: Orchestre du Théâtre Mariinsky + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586711': + description: null + id: 138586711 + logo: /images/UE0AAAAACEKqVwAAAAVDSVRN + name: Orchestre du Théâtre Mariinsky + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586715': + description: null + id: 138586715 + logo: /images/UE0AAAAACEKqWwAAAAVDSVRN + name: Orchestre du Théâtre Mariinsky + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586719': + description: null + id: 138586719 + logo: /images/UE0AAAAACEKqXwAAAAVDSVRN + name: Etienne Daho et invités + subTopicIds: + - 337184280 + - 337184297 + - 337184283 + - 337184262 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586723': + description: null + id: 138586723 + logo: null + name: Fantasia in concert + subTopicIds: + - 337184299 + - 337184268 + - 337184267 + - 337184275 + - 337184282 + subjectCode: null + subtitle: null + topicIds: + - 324846098 + - 324846099 + - 107888604 + - 324846100 + '138586731': + description: null + id: 138586731 + logo: /images/UE0AAAAACEKqawAAAAVDSVRN + name: 'Khatia Buniatishvili, piano' + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586735': + description: null + id: 138586735 + logo: /images/UE0AAAAACEKqbwAAAAVDSVRN + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586743': + description: null + id: 138586743 + logo: null + name: Guy Braunstein - Zvi Plesser - Sunwook Kim + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586747': + description: null + id: 138586747 + logo: /images/UE0AAAAACEKqewAAAAVDSVRN + name: Janine Jansen and friends + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586751': + description: null + id: 138586751 + logo: /images/UE0AAAAACEKqfwAAAAVDSVRN + name: 'Elena Bashkirova, piano' + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586755': + description: null + id: 138586755 + logo: null + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184284 + - 337184298 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586759': + description: null + id: 138586759 + logo: null + name: San Francisco Symphony + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586771': + description: null + id: 138586771 + logo: null + name: Passion selon saint Jean - J.S. Bach + subTopicIds: + - 337184296 + - 337184263 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586775': + description: null + id: 138586775 + logo: null + name: 'Yundi Li , piano' + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586779': + description: null + id: 138586779 + logo: null + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586783': + description: null + id: 138586783 + logo: null + name: Orchestre Pasdeloup + subTopicIds: + - 337184268 + - 337184269 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586787': + description: null + id: 138586787 + logo: null + name: Orchestre du Conservatoire de Paris + subTopicIds: + - 337184284 + - 337184298 + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586795': + description: null + id: 138586795 + logo: null + name: Orchestre National d'Île-de-France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586799': + description: null + id: 138586799 + logo: null + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586803': + description: null + id: 138586803 + logo: null + name: Royal Concertgebouw Orchestra Amsterdam + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586807': + description: null + id: 138586807 + logo: null + name: Royal Concertgebouw Orchestra Amsterdam + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586811': + description: null + id: 138586811 + logo: null + name: Royal Concertgebouw Orchestra Amsterdam + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586815': + description: null + id: 138586815 + logo: null + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586823': + description: null + id: 138586823 + logo: null + name: London Symphony Orchestra + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586827': + description: null + id: 138586827 + logo: null + name: London Symphony Orchestra + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586831': + description: null + id: 138586831 + logo: null + name: Le Concert des Nations - Jordi Savall + subTopicIds: + - 337184263 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586835': + description: null + id: 138586835 + logo: null + name: Leonidas Kavakos - Yuja Wang + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586839': + description: null + id: 138586839 + logo: null + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586843': + description: null + id: 138586843 + logo: null + name: Quatuor Artemis - Gautier Capuçon + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586847': + description: null + id: 138586847 + logo: null + name: Quatuor Artemis - Quatuor Ébène + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586851': + description: null + id: 138586851 + logo: null + name: Quatuor Artemis - Elisabeth Leonskaja + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586855': + description: null + id: 138586855 + logo: null + name: Russian National Orchestra + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586859': + description: null + id: 138586859 + logo: null + name: Passion selon saint Matthieu + subTopicIds: + - 337184296 + - 337184263 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586863': + description: null + id: 138586863 + logo: null + name: Les Arts Florissants - Concert de Pâques + subTopicIds: + - 337184263 + - 337184298 + - 337184283 + - 337184292 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586867': + description: null + id: 138586867 + logo: null + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586871': + description: null + id: 138586871 + logo: null + name: Leylâ et Majnûn ou L'Amour mystique + subTopicIds: + - 337184279 + - 337184283 + - 337184262 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586875': + description: null + id: 138586875 + logo: null + name: 'Stephen Kovacevich, piano' + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586879': + description: null + id: 138586879 + logo: null + name: Orchestra Mozart Bologna - Mahler Chamber Orchestra + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586883': + description: null + id: 138586883 + logo: null + name: Ballet Royal du Cambodge + subTopicIds: + - 337184279 + - 337184283 + - 337184262 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586889': + description: null + id: 138586889 + logo: null + name: MDR Sinfonieorchester Leipzig + subTopicIds: + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586893': + description: null + id: 138586893 + logo: null + name: Orchestre Colonne + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586897': + description: null + id: 138586897 + logo: null + name: 'Elisabeth Leonskaja, piano' + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586901': + description: null + id: 138586901 + logo: null + name: 'Yuja Wang, piano' + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586905': + description: null + id: 138586905 + logo: null + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586909': + description: null + id: 138586909 + logo: null + name: Anne-Sophie Mutter - Lambert Orkis + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586917': + description: null + id: 138586917 + logo: null + name: Orchestre National d'Île-de-France + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586921': + description: null + id: 138586921 + logo: null + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586929': + description: null + id: 138586929 + logo: null + name: Orchestre Pasdeloup + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586933': + description: null + id: 138586933 + logo: null + name: Gilberto Gil + subTopicIds: + - 337184279 + - 337184283 + - 337184262 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586937': + description: null + id: 138586937 + logo: null + name: 'Nelson Freire, piano' + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586941': + description: null + id: 138586941 + logo: null + name: Orchestre Philharmonique de Radio France + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586945': + description: null + id: 138586945 + logo: null + name: Orfeo - C. Monteverdi (version de concert) + subTopicIds: + - 337184284 + - 337184263 + - 337184298 + - 337184283 + - 337184292 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586949': + description: null + id: 138586949 + logo: null + name: Bamberger Symphoniker + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586953': + description: null + id: 138586953 + logo: null + name: 'Murray Perahia, piano' + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586957': + description: null + id: 138586957 + logo: null + name: Orchestre National du Capitole de Toulouse + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586961': + description: null + id: 138586961 + logo: null + name: 'Krystian Zimerman, piano' + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586965': + description: null + id: 138586965 + logo: null + name: 'Rafal Blechacz, piano' + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586969': + description: null + id: 138586969 + logo: null + name: Les Voyages musicaux de Marco Polo + subTopicIds: + - 337184279 + - 337184283 + - 337184262 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586973': + description: null + id: 138586973 + logo: null + name: Orchestre National de Lyon + subTopicIds: + - 337184298 + - 337184268 + - 337184283 + - 337184292 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586977': + description: null + id: 138586977 + logo: null + name: Guy Braunstein - Zvi Plesser - Sunwook Kim + subTopicIds: + - 337184281 + - 337184283 + - 337184273 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586981': + description: null + id: 138586981 + logo: null + name: La Bohème - G. Puccini (version de concert) + subTopicIds: + - 337184284 + - 337184298 + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586989': + description: null + id: 138586989 + logo: null + name: Otello - G. Verdi (version de concert) + subTopicIds: + - 337184284 + - 337184298 + - 337184268 + - 337184283 + - 337184292 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586993': + description: null + id: 138586993 + logo: null + name: Staatskapelle Berlin + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '138586997': + description: null + id: 138586997 + logo: null + name: Staatskapelle Berlin + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '151183114': + description: null + id: 151183114 + logo: null + name: San Francisco Symphony + subTopicIds: + - 337184298 + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '339420802': + description: null + id: 339420802 + logo: null + name: Lou Doillon + subTopicIds: + - 337184280 + - 337184283 + - 337184262 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '339420805': + description: null + id: 339420805 + logo: null + name: Patrick Watson & Orchestre National d'Ile-de-France + subTopicIds: + - 337184280 + - 337184283 + - 337184262 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341069930': + description: null + id: 341069930 + logo: /images/UE0AAAAAFFRQagAAAAlDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181232': + description: null + id: 341181232 + logo: null + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181233': + description: null + id: 341181233 + logo: /images/UE0AAAAAFFYDMQAAAAhDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181234': + description: null + id: 341181234 + logo: /images/UE0AAAAAFFYDMgAAAAdDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181235': + description: null + id: 341181235 + logo: /images/UE0AAAAAFFYDMwAAAAZDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181236': + description: null + id: 341181236 + logo: /images/UE0AAAAAFFYDNAAAAAZDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181237': + description: null + id: 341181237 + logo: /images/UE0AAAAAFFYDNQAAAAhDSVRN + name: 'Paavo Järvi, direction' + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181238': + description: null + id: 341181238 + logo: /images/UE0AAAAAFFYDNgAAAAdDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181239': + description: null + id: 341181239 + logo: /images/UE0AAAAAFFYDNwAAAAdDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181240': + description: null + id: 341181240 + logo: /images/UE0AAAAAFFYDOAAAAAhDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181241': + description: null + id: 341181241 + logo: /images/UE0AAAAAFFYDOQAAAAZDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181242': + description: null + id: 341181242 + logo: /images/UE0AAAAAFFYDOgAAAAdDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181243': + description: null + id: 341181243 + logo: /images/UE0AAAAAFFYDOwAAAAdDSVRN + name: Concert anniversaire des 90 ans de Menahem Pressler + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181244': + description: null + id: 341181244 + logo: /images/UE0AAAAAFFYDPAAAAAZDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181245': + description: null + id: 341181245 + logo: /images/UE0AAAAAFFYDPQAAAAZDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181246': + description: null + id: 341181246 + logo: null + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181247': + description: null + id: 341181247 + logo: null + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181248': + description: null + id: 341181248 + logo: /images/UE0AAAAAFFYDQAAAAAZDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181249': + description: null + id: 341181249 + logo: /images/UE0AAAAAFFYDQQAAAAdDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181250': + description: null + id: 341181250 + logo: /images/UE0AAAAAFFYDQgAAAAdDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181251': + description: null + id: 341181251 + logo: null + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181252': + description: null + id: 341181252 + logo: /images/UE0AAAAAFFYDRAAAAAdDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181253': + description: null + id: 341181253 + logo: null + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181254': + description: null + id: 341181254 + logo: /images/UE0AAAAAFFYDRgAAAAlDSVRN + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181255': + description: null + id: 341181255 + logo: null + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181256': + description: null + id: 341181256 + logo: null + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181257': + description: null + id: 341181257 + logo: null + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181258': + description: null + id: 341181258 + logo: null + name: Orchestre de Paris + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '341181259': + description: null + id: 341181259 + logo: null + name: 14052122 JARVI / GOERNE / SOLBERG / CHŒUR + subTopicIds: + - 337184268 + - 337184288 + - 337184283 + - 337184275 + subjectCode: null + subtitle: null + topicIds: + - 324846099 + - 107888604 + - 324846100 + '342742592': + description: null + id: 342742592 + logo: null + name: event secret 2 + subTopicIds: [] + subjectCode: null + subtitle: null + topicIds: [] + '342742593': + description: null + id: 342742593 + logo: null + name: event secret 3 + subTopicIds: [] + subjectCode: null + subtitle: null + topicIds: [] + '342742594': + description: null + id: 342742594 + logo: null + name: event secret 4 + subTopicIds: [] + subjectCode: null + subtitle: null + topicIds: [] + '342742595': + description: null + id: 342742595 + logo: null + name: event secret 5 + subTopicIds: [] + subjectCode: null + subtitle: null + topicIds: [] + '342742596': + description: null + id: 342742596 + logo: null + name: event secret 6 + subTopicIds: [] + subjectCode: null + subtitle: null + topicIds: [] +performances: + - eventId: 138586341 + id: 339887544 + logo: null + name: null + prices: + - amount: 90250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937295 + - amount: 66500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937296 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937295 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937296 + seatMapImage: null + start: 1372701600000 + venueCode: PLEYEL_PLEYEL + - eventId: 339420802 + id: 339430296 + logo: null + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937295 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937296 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937295 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937296 + seatMapImage: null + start: 1372788000000 + venueCode: PLEYEL_PLEYEL + - eventId: 339420805 + id: 339430301 + logo: null + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937295 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937296 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937295 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937296 + seatMapImage: null + start: 1373220000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586345 + id: 138586347 + logo: /images/UE0AAAAACEKo6QAAAAZDSVRN + name: null + prices: + - amount: 152000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 104500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 52250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1377972000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586349 + id: 138586351 + logo: /images/UE0AAAAACEKo7QAAAAZDSVRN + name: null + prices: + - amount: 152000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 104500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 52250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1378044000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586353 + id: 138586355 + logo: /images/UE0AAAAACEKo8QAAAAZDSVRN + name: null + prices: + - amount: 90250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 71250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 52250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1378490400000 + venueCode: PLEYEL_PLEYEL + - eventId: 341069930 + id: 341070133 + logo: /images/UE0AAAAAFFRQagAAAAlDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826016 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826017 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826015 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826018 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826016 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826017 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826015 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 340826018 + seatMapImage: null + start: 1378922400000 + venueCode: PLEYEL_PLEYEL + - eventId: 341069930 + id: 341070132 + logo: /images/UE0AAAAAFFRQagAAAAlDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826016 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826017 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826015 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826018 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826016 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826017 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826015 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 340826018 + seatMapImage: null + start: 1379008800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586357 + id: 138586359 + logo: /images/UE0AAAAACEKo9QAAAAhDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1379095200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586361 + id: 138586363 + logo: /images/UE0AAAAACEKo+QAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1379440800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586365 + id: 138586367 + logo: /images/UE0AAAAACEKo/QAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1379959200000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181254 + id: 341181470 + logo: /images/UE0AAAAAFFYDRgAAAAlDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + seatMapImage: null + start: 1380132000000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181254 + id: 341181469 + logo: /images/UE0AAAAAFFYDRgAAAAlDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + seatMapImage: null + start: 1380218400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586369 + id: 138586371 + logo: /images/UE0AAAAACEKpAQAAAAVDSVRN + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 19000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 14250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1380650400000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181252 + id: 341181467 + logo: /images/UE0AAAAAFFYDRAAAAAdDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1380736800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586373 + id: 138586375 + logo: /images/UE0AAAAACEKpBQAAAAdDSVRN + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086196 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086197 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086196 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086197 + seatMapImage: null + start: 1380996000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586377 + id: 138586379 + logo: /images/UE0AAAAACEKpCQAAAAVDSVRN + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086196 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086197 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086196 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086197 + seatMapImage: null + start: 1381082400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586381 + id: 138586383 + logo: /images/UE0AAAAACEKpDQAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1381168800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586385 + id: 138586387 + logo: /images/UE0AAAAACEKpEQAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1381255200000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181234 + id: 341181437 + logo: /images/UE0AAAAAFFYDMgAAAAdDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1381341600000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181234 + id: 341181436 + logo: /images/UE0AAAAAFFYDMgAAAAdDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1381428000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586389 + id: 138586391 + logo: /images/UE0AAAAACEKpFQAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1381512600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586393 + id: 138586395 + logo: /images/UE0AAAAACEKpGQAAAAhDSVRN + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937241 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937242 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937244 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937245 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937246 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937241 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937242 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937244 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937245 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937246 + seatMapImage: null + start: 1381586400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586397 + id: 138586399 + logo: null + name: null + prices: + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086196 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086197 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086196 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086197 + seatMapImage: null + start: 1381672800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586401 + id: 138586403 + logo: /images/UE0AAAAACEKpIQAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1381773600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586405 + id: 138586407 + logo: /images/UE0AAAAACEKpJQAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1381860000000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181233 + id: 341181435 + logo: /images/UE0AAAAAFFYDMQAAAAhDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1381946400000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181237 + id: 341181442 + logo: /images/UE0AAAAAFFYDNQAAAAhDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1382032800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586409 + id: 138586411 + logo: /images/UE0AAAAACEKpKQAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1382119200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586413 + id: 138586415 + logo: /images/UE0AAAAACEKpLQAAAAVDSVRN + name: null + prices: + - amount: 95000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1382277600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586417 + id: 138586419 + logo: /images/UE0AAAAACEKpMQAAAAZDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1382378400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586421 + id: 138586423 + logo: /images/UE0AAAAACEKpNQAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1382464800000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181238 + id: 341181444 + logo: /images/UE0AAAAAFFYDNgAAAAdDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1382551200000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181238 + id: 341181443 + logo: /images/UE0AAAAAFFYDNgAAAAdDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1382637600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586425 + id: 138586427 + logo: null + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937235 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937236 + - amount: 19000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937238 + - amount: 14250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937239 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937240 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937235 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937236 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937238 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937239 + - areas: + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937240 + seatMapImage: null + start: 1382724000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586429 + id: 138586431 + logo: /images/UE0AAAAACEKpPQAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1382810400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586433 + id: 138586435 + logo: /images/UE0AAAAACEKpQQAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1382886000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586437 + id: 138586439 + logo: /images/UE0AAAAACEKpRQAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1383073200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586441 + id: 138586443 + logo: /images/UE0AAAAACEKpSQAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1383246000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586445 + id: 138586447 + logo: /images/UE0AAAAACEKpTQAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1383332400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586449 + id: 138586451 + logo: /images/UE0AAAAACEKpUQAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1383418800000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742592 + id: 342742708 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1383555600000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742592 + id: 342742709 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1383562800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586453 + id: 138586455 + logo: /images/UE0AAAAACEKpVQAAAAVDSVRN + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937295 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937296 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937295 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937296 + seatMapImage: null + start: 1383591600000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742592 + id: 342742710 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1383642000000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742592 + id: 342742711 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1383649200000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742592 + id: 342742712 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1383728400000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742592 + id: 342742713 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1383735600000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742592 + id: 342742714 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1383814800000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742592 + id: 342742715 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1383822000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586457 + id: 138586459 + logo: /images/UE0AAAAACEKpWQAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1383850800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586461 + id: 138586463 + logo: /images/UE0AAAAACEKpXQAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1383937200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586465 + id: 138586467 + logo: /images/UE0AAAAACEKpYQAAAAVDSVRN + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086196 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086197 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086196 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086197 + seatMapImage: null + start: 1384110000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586469 + id: 138586471 + logo: /images/UE0AAAAACEKpZQAAAAVDSVRN + name: null + prices: + - amount: 90250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937289 + - amount: 71250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937290 + - amount: 52250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937292 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937293 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937289 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937290 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937292 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937293 + seatMapImage: null + start: 1384196400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586473 + id: 138586475 + logo: /images/UE0AAAAACEKpaQAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1384282800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586477 + id: 138586479 + logo: /images/UE0AAAAACEKpbQAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1384369200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586481 + id: 138586483 + logo: /images/UE0AAAAACEKpcQAAAAVDSVRN + name: null + prices: + - amount: 95000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1384455600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586485 + id: 138586487 + logo: /images/UE0AAAAACEKpdQAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1384542000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586501 + id: 138586503 + logo: /images/UE0AAAAACEKphQAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1384801200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586505 + id: 138586507 + logo: /images/UE0AAAAACEKpiQAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1384887600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586509 + id: 138586511 + logo: null + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937235 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937236 + - amount: 19000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937238 + - amount: 14250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937239 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937240 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937235 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937236 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937238 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937239 + - areas: + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937240 + seatMapImage: null + start: 1385146800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586513 + id: 138586515 + logo: /images/UE0AAAAACEKpkQAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1385231400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586517 + id: 138586519 + logo: /images/UE0AAAAACEKplQAAAAdDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1385305200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586521 + id: 138586523 + logo: /images/UE0AAAAACEKpmQAAAAVDSVRN + name: null + prices: + - amount: 152000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 104500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 52250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1385492400000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181235 + id: 341181439 + logo: /images/UE0AAAAAFFYDMwAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826016 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826017 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826015 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826018 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826019 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826016 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826017 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826015 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 340826018 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826019 + seatMapImage: null + start: 1385665200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586525 + id: 138586527 + logo: /images/UE0AAAAACEKpnQAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1385751600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586529 + id: 138586531 + logo: null + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937241 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937242 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937244 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937245 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937246 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937241 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937242 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937244 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937245 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937246 + seatMapImage: null + start: 1385823600000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181235 + id: 341181438 + logo: /images/UE0AAAAAFFYDMwAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826016 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826017 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826015 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826018 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826019 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826016 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826017 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826015 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 340826018 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826019 + seatMapImage: null + start: 1385838000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586533 + id: 138586535 + logo: /images/UE0AAAAACEKppQAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1385910000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586537 + id: 138586539 + logo: /images/UE0AAAAACEKpqQAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1386010800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586541 + id: 138586543 + logo: /images/UE0AAAAACEKprQAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1386097200000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181236 + id: 341181440 + logo: /images/UE0AAAAAFFYDNAAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1386183600000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181236 + id: 341181441 + logo: /images/UE0AAAAAFFYDNAAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1386270000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586545 + id: 138586547 + logo: /images/UE0AAAAACEKpsQAAAAVDSVRN + name: null + prices: + - amount: 104500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1386356400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586549 + id: 138586551 + logo: /images/UE0AAAAACEKptQAAAAVDSVRN + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1386428400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586553 + id: 138586555 + logo: /images/UE0AAAAACEKpuQAAAAVDSVRN + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1386442800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586557 + id: 138586559 + logo: /images/UE0AAAAACEKpvQAAAAVDSVRN + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1386514800000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742593 + id: 342742716 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1386579600000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742593 + id: 342742717 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1386586800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586561 + id: 138586563 + logo: /images/UE0AAAAACEKpwQAAAAVDSVRN + name: null + prices: + - amount: 95000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1386615600000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742593 + id: 342742718 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1386666000000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742593 + id: 342742719 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1386673200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586565 + id: 138586567 + logo: null + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 19000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 14250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1386702000000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742593 + id: 342742720 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1386752400000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742593 + id: 342742721 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1386759600000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181241 + id: 341181449 + logo: /images/UE0AAAAAFFYDOQAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1386788400000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742593 + id: 342742722 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1386838800000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742593 + id: 342742723 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1386846000000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181241 + id: 341181450 + logo: /images/UE0AAAAAFFYDOQAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1386874800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586569 + id: 138586571 + logo: /images/UE0AAAAACEKpyQAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1386961200000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742594 + id: 342742724 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1387184400000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742594 + id: 342742725 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1387191600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586581 + id: 138586583 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264860 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264861 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264863 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264864 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264860 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264861 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264863 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264864 + seatMapImage: null + start: 1387220400000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742594 + id: 342742726 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1387270800000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742594 + id: 342742727 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1387278000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586585 + id: 138586587 + logo: /images/UE0AAAAACEKp2QAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1387306800000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742594 + id: 342742728 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1387357200000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742594 + id: 342742729 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1387364400000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181250 + id: 341181465 + logo: /images/UE0AAAAAFFYDQgAAAAdDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1387393200000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742594 + id: 342742730 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1387443600000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742594 + id: 342742731 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1387450800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586589 + id: 138586591 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1387566000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586593 + id: 138586595 + logo: /images/UE0AAAAACEKp4QAAAAdDSVRN + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937235 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937236 + - amount: 19000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937238 + - amount: 14250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937239 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937240 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937235 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937236 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937238 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937239 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937240 + seatMapImage: null + start: 1387724400000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742595 + id: 342742732 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1387789200000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742595 + id: 342742733 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1387796400000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742595 + id: 342742734 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1387875600000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742595 + id: 342742735 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1387882800000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742595 + id: 342742736 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1387962000000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742595 + id: 342742737 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1387969200000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742595 + id: 342742738 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1388048400000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742595 + id: 342742739 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1388055600000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742596 + id: 342742740 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1388998800000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742596 + id: 342742741 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1389006000000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742596 + id: 342742742 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1389085200000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742596 + id: 342742743 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1389092400000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742596 + id: 342742744 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1389171600000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742596 + id: 342742745 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1389178800000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181245 + id: 341181458 + logo: /images/UE0AAAAAFFYDPQAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1389207600000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742596 + id: 342742746 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1389258000000 + venueCode: PLEYEL_PLEYEL + - eventId: 342742596 + id: 342742747 + logo: null + name: null + prices: + - amount: 180500 + audienceSubCategoryId: 337100890 + seatCategoryId: 342752792 + seatCategories: + - areas: + - areaId: 342752287 + blockIds: [] + seatCategoryId: 342752792 + seatMapImage: null + start: 1389265200000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181245 + id: 341181457 + logo: /images/UE0AAAAAFFYDPQAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1389294000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586597 + id: 138586599 + logo: /images/UE0AAAAACEKp5QAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1389380400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586601 + id: 138586603 + logo: /images/UE0AAAAACEKp6QAAAAdDSVRN + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937241 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937242 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937244 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937245 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937246 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937241 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937242 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937244 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937245 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937246 + seatMapImage: null + start: 1389452400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586605 + id: 138586607 + logo: null + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 19000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 14250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1389538800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586609 + id: 138586611 + logo: null + name: null + prices: + - amount: 15000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937314 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937314 + seatMapImage: null + start: 1389726000000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181242 + id: 341181451 + logo: /images/UE0AAAAAFFYDOgAAAAdDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1389812400000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181242 + id: 341181452 + logo: /images/UE0AAAAAFFYDOgAAAAdDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1389898800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586613 + id: 138586615 + logo: /images/UE0AAAAACEKp9QAAAAVDSVRN + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086215 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + - areas: + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086215 + seatMapImage: null + start: 1389985200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586617 + id: 138586619 + logo: /images/UE0AAAAACEKp+QAAAAVDSVRN + name: null + prices: + - amount: 90250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 71250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 52250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1390071600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586625 + id: 138586627 + logo: null + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937235 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937236 + - amount: 19000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937238 + - amount: 14250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937239 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937240 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937235 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937236 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937238 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937239 + - areas: + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937240 + seatMapImage: null + start: 1390143600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586629 + id: 138586631 + logo: /images/UE0AAAAACEKqBQAAAAVDSVRN + name: null + prices: + - amount: 90250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937271 + - amount: 71250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937272 + - amount: 52250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937274 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937275 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937271 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937272 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937274 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937275 + seatMapImage: null + start: 1390159800000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181239 + id: 341181446 + logo: /images/UE0AAAAAFFYDNwAAAAdDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826016 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826017 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826015 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826018 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826019 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826016 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826017 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826015 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 340826018 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826019 + seatMapImage: null + start: 1390417200000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181239 + id: 341181445 + logo: /images/UE0AAAAAFFYDNwAAAAdDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826016 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826017 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826015 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826018 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826019 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826016 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826017 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826015 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 340826018 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826019 + seatMapImage: null + start: 1390503600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586633 + id: 138586635 + logo: /images/UE0AAAAACEKqCQAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1390590000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586641 + id: 138586643 + logo: /images/UE0AAAAACEKqEQAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1390676400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586645 + id: 138586647 + logo: /images/UE0AAAAACEKqFQAAAAdDSVRN + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937235 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937236 + - amount: 19000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937238 + - amount: 14250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937239 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937240 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937235 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937236 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937238 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937239 + - areas: + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937240 + seatMapImage: null + start: 1390748400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586649 + id: 138586651 + logo: /images/UE0AAAAACEKqGQAAAAZDSVRN + name: null + prices: + - amount: 95000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1390849200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586653 + id: 138586655 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1390935600000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181243 + id: 341181453 + logo: /images/UE0AAAAAFFYDOwAAAAdDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + seatMapImage: null + start: 1391022000000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181243 + id: 341181454 + logo: /images/UE0AAAAAFFYDOwAAAAdDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + seatMapImage: null + start: 1391108400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586657 + id: 138586659 + logo: /images/UE0AAAAACEKqIQAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1391194800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586661 + id: 138586663 + logo: null + name: null + prices: + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086196 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086197 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086196 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086197 + seatMapImage: null + start: 1391353200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586661 + id: 138586665 + logo: null + name: null + prices: + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086196 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086197 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086196 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086197 + seatMapImage: null + start: 1391367600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586667 + id: 138586669 + logo: null + name: null + prices: + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937295 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937296 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937295 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937296 + seatMapImage: null + start: 1391540400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586671 + id: 138586673 + logo: /images/UE0AAAAACEKqLwAAAAlDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937289 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937290 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937292 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937293 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937289 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937290 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937292 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937293 + seatMapImage: null + start: 1391626800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586675 + id: 138586677 + logo: /images/UE0AAAAACEKqMwAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1391713200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586679 + id: 138586681 + logo: /images/UE0AAAAACEKqNwAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1391799600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586687 + id: 138586689 + logo: /images/UE0AAAAACEKqPwAAAAVDSVRN + name: null + prices: + - amount: 90250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 71250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 52250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1391886000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586691 + id: 138586693 + logo: null + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 19000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 14250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1391958000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586695 + id: 138586697 + logo: /images/UE0AAAAACEKqRwAAAAVDSVRN + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1392145200000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181240 + id: 341181448 + logo: /images/UE0AAAAAFFYDOAAAAAhDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1392231600000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181240 + id: 341181447 + logo: /images/UE0AAAAAFFYDOAAAAAhDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1392318000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586699 + id: 138586701 + logo: null + name: null + prices: + - amount: 15000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264872 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264872 + seatMapImage: null + start: 1392404400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586703 + id: 138586705 + logo: /images/UE0AAAAACEKqTwAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1392490800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586707 + id: 138586709 + logo: /images/UE0AAAAACEKqUwAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1392562800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586711 + id: 138586713 + logo: /images/UE0AAAAACEKqVwAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1392663600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586715 + id: 138586717 + logo: /images/UE0AAAAACEKqWwAAAAVDSVRN + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1392750000000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181248 + id: 341181462 + logo: /images/UE0AAAAAFFYDQAAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1392836400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586719 + id: 138586721 + logo: /images/UE0AAAAACEKqXwAAAAVDSVRN + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086196 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086197 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086196 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086197 + seatMapImage: null + start: 1393095600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586723 + id: 138586729 + logo: null + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937307 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937308 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937310 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937311 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937312 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937307 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937308 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937310 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937311 + - areas: + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937312 + seatMapImage: null + start: 1393678800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586723 + id: 138586725 + logo: null + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937307 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937308 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937310 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937311 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937312 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937307 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937308 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937310 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937311 + - areas: + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937312 + seatMapImage: null + start: 1393693200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586723 + id: 138586727 + logo: null + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937307 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937308 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937310 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937311 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937312 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937307 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937308 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937310 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937311 + - areas: + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937312 + seatMapImage: null + start: 1393754400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586731 + id: 138586733 + logo: /images/UE0AAAAACEKqawAAAAVDSVRN + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 19000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 14250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1393959600000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181249 + id: 341181463 + logo: /images/UE0AAAAAFFYDQQAAAAdDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826016 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826017 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826015 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826018 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826019 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826016 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826017 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 340826015 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 340826018 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826019 + seatMapImage: null + start: 1394046000000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181249 + id: 341181464 + logo: /images/UE0AAAAAFFYDQQAAAAdDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826016 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826017 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826015 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826018 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826019 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826016 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826017 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 340826015 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 340826018 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826019 + seatMapImage: null + start: 1394132400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586735 + id: 138586737 + logo: /images/UE0AAAAACEKqbwAAAAVDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1394218800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586743 + id: 138586745 + logo: null + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1394305200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586747 + id: 138586749 + logo: /images/UE0AAAAACEKqewAAAAVDSVRN + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1394377200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586751 + id: 138586753 + logo: /images/UE0AAAAACEKqfwAAAAVDSVRN + name: null + prices: + - amount: 95000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1394478000000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181244 + id: 341181455 + logo: /images/UE0AAAAAFFYDPAAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1394650800000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181244 + id: 341181456 + logo: /images/UE0AAAAAFFYDPAAAAAZDSVRN + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1394737200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586755 + id: 138586757 + logo: null + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264866 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264867 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264869 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264870 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264866 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264867 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264869 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264870 + seatMapImage: null + start: 1394823600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586759 + id: 138586761 + logo: null + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1395082800000 + venueCode: PLEYEL_PLEYEL + - eventId: 151183114 + id: 151183116 + logo: null + name: null + prices: + - amount: 90250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937289 + - amount: 71250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937290 + - amount: 52250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937292 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937293 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937289 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937290 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937292 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937293 + seatMapImage: null + start: 1395169200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586771 + id: 138586773 + logo: null + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1395255600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586775 + id: 138586777 + logo: null + name: null + prices: + - amount: 95000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1395342000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586779 + id: 138586781 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1395428400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586783 + id: 138586785 + logo: null + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937241 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937242 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937244 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937245 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937246 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937241 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937242 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937244 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937245 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937246 + seatMapImage: null + start: 1395500400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586787 + id: 138586789 + logo: null + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 19000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 14250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1395514800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586795 + id: 138586797 + logo: null + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937235 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937236 + - amount: 19000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937238 + - amount: 14250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937239 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937240 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937235 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937236 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937238 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937239 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937240 + seatMapImage: null + start: 1395586800000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181246 + id: 341181459 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826016 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826017 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826015 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826018 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826019 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826016 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826017 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826015 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 340826018 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826019 + seatMapImage: null + start: 1395860400000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181246 + id: 341181460 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826016 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826017 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826015 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826018 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826019 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826016 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826017 + - areas: + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826015 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 340826018 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826019 + seatMapImage: null + start: 1395946800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586799 + id: 138586801 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1396033200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586803 + id: 138586805 + logo: null + name: null + prices: + - amount: 90250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 71250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 52250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1396191600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586807 + id: 138586809 + logo: null + name: null + prices: + - amount: 104500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1396288800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586811 + id: 138586813 + logo: null + name: null + prices: + - amount: 90250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 71250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 52250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1396375200000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181255 + id: 341181472 + logo: null + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + seatMapImage: null + start: 1396461600000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181255 + id: 341181471 + logo: null + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + seatMapImage: null + start: 1396548000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586815 + id: 138586817 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1396634400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586823 + id: 138586825 + logo: null + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1396720800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586827 + id: 138586829 + logo: null + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1396792800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586831 + id: 138586833 + logo: null + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1396893600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586835 + id: 138586837 + logo: null + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1396980000000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181256 + id: 341181473 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1397066400000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181256 + id: 341181474 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1397152800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586839 + id: 138586841 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264866 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264867 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264869 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264870 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264866 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264867 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264869 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264870 + seatMapImage: null + start: 1397239200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586843 + id: 138586845 + logo: null + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1397311200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586847 + id: 138586849 + logo: null + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1397325600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586851 + id: 138586853 + logo: null + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1397397600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586855 + id: 138586857 + logo: null + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1397498400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586859 + id: 138586861 + logo: null + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1397584800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586863 + id: 138586865 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1397930400000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181251 + id: 341181466 + logo: null + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + seatMapImage: null + start: 1398276000000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181253 + id: 341181468 + logo: null + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + seatMapImage: null + start: 1398362400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586867 + id: 138586869 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1398448800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586871 + id: 138586873 + logo: null + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086196 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086197 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086196 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086197 + seatMapImage: null + start: 1398607200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586875 + id: 138586877 + logo: null + name: null + prices: + - amount: 95000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1398708000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586879 + id: 138586881 + logo: null + name: null + prices: + - amount: 171000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 123500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 95000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 66500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1398794400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586883 + id: 138586887 + logo: null + name: null + prices: + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086196 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086197 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086196 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086197 + seatMapImage: null + start: 1399125600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586883 + id: 138586885 + logo: null + name: null + prices: + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086196 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086197 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086196 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086197 + seatMapImage: null + start: 1399140000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586889 + id: 138586891 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937307 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937308 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937310 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937311 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937307 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937308 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937310 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937311 + seatMapImage: null + start: 1399312800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586893 + id: 138586895 + logo: null + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 19000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 14250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1399399200000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181232 + id: 341181434 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1399485600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586897 + id: 138586899 + logo: null + name: null + prices: + - amount: 95000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1399917600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586901 + id: 138586903 + logo: null + name: null + prices: + - amount: 95000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1400176800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586905 + id: 138586907 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1400263200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586909 + id: 138586911 + logo: null + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1400349600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586917 + id: 138586919 + logo: null + name: null + prices: + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937235 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937236 + - amount: 19000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937238 + - amount: 14250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937239 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937240 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937235 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937236 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937238 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937239 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937240 + seatMapImage: null + start: 1400421600000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181259 + id: 341181480 + logo: null + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826016 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826017 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826015 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826018 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826016 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826017 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826015 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 340826018 + seatMapImage: null + start: 1400695200000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181259 + id: 341181479 + logo: null + name: null + prices: + - amount: 80750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826016 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826017 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826015 + - amount: 28500 + audienceSubCategoryId: 337100890 + seatCategoryId: 340826018 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826016 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826017 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 340826015 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 340826018 + seatMapImage: null + start: 1400781600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586921 + id: 138586923 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086210 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086211 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086213 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086214 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086210 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086211 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086214 + seatMapImage: null + start: 1400868000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586929 + id: 138586931 + logo: null + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937241 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937242 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937244 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937245 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937246 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937241 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937242 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937244 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937245 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937246 + seatMapImage: null + start: 1400940000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586933 + id: 138586935 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086196 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086197 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086196 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086197 + seatMapImage: null + start: 1401026400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586937 + id: 138586939 + logo: null + name: null + prices: + - amount: 95000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1401127200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586941 + id: 138586943 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264860 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264861 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264863 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341264864 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264860 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264861 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264863 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341264864 + seatMapImage: null + start: 1401472800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586945 + id: 138586947 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1401730200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586949 + id: 138586951 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1401818400000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586953 + id: 138586955 + logo: null + name: null + prices: + - amount: 95000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1401904800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586957 + id: 138586959 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + seatMapImage: null + start: 1401991200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586961 + id: 138586963 + logo: null + name: null + prices: + - amount: 95000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1402077600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586965 + id: 138586967 + logo: null + name: null + prices: + - amount: 95000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1402423200000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181258 + id: 341181477 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1402509600000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181258 + id: 341181478 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1402596000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586969 + id: 138586971 + logo: null + name: null + prices: + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086196 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 339086197 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086196 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 339086197 + seatMapImage: null + start: 1402768800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586973 + id: 138586975 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + seatMapImage: null + start: 1402840800000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586977 + id: 138586979 + logo: null + name: null + prices: + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 33250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 23750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 16150 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1402941600000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586981 + id: 138586983 + logo: null + name: null + prices: + - amount: 123500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937289 + - amount: 85500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937290 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937292 + - amount: 38000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937293 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937294 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937289 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937290 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937292 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937293 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937294 + seatMapImage: null + start: 1403028000000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181257 + id: 341181475 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1403114400000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181257 + id: 341181476 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1403200800000 + venueCode: PLEYEL_PLEYEL + - eventId: 341181247 + id: 341181461 + logo: null + name: null + prices: + - amount: 57000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179212 + - amount: 42750 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179213 + - amount: 32300 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179214 + - amount: 20900 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179215 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 341179216 + seatCategories: + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179212 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179213 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179214 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + seatCategoryId: 341179215 + - areas: + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 341179216 + seatMapImage: null + start: 1403719200000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586989 + id: 138586991 + logo: null + name: null + prices: + - amount: 152000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937284 + - amount: 104500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937285 + - amount: 76000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937287 + - amount: 52250 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937288 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937283 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937284 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937285 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937287 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937288 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937283 + seatMapImage: null + start: 1403892000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586993 + id: 138586995 + logo: null + name: null + prices: + - amount: 123500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 85500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 38000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1404324000000 + venueCode: PLEYEL_PLEYEL + - eventId: 138586997 + id: 138586999 + logo: null + name: null + prices: + - amount: 123500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937277 + - amount: 85500 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937278 + - amount: 61750 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937280 + - amount: 38000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937281 + - amount: 10000 + audienceSubCategoryId: 337100890 + seatCategoryId: 338937282 + seatCategories: + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937277 + - areas: + - areaId: 205705999 + blockIds: [] + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937278 + - areas: + - areaId: 205705998 + blockIds: [] + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205705995 + blockIds: [] + - areaId: 205705996 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205705993 + blockIds: [] + - areaId: 205706007 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937280 + - areas: + - areaId: 205705994 + blockIds: [] + - areaId: 205706006 + blockIds: [] + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706001 + blockIds: [] + - areaId: 205706000 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937281 + - areas: + - areaId: 205706005 + blockIds: [] + - areaId: 205706004 + blockIds: [] + - areaId: 205706003 + blockIds: [] + - areaId: 205706002 + blockIds: [] + - areaId: 205706009 + blockIds: [] + - areaId: 205706008 + blockIds: [] + seatCategoryId: 338937282 + seatMapImage: null + start: 1404410400000 + venueCode: PLEYEL_PLEYEL +seatCategoryNames: + '338937235': 1ère catégorie + '338937236': 2ème catégorie + '338937238': 3ème catégorie + '338937239': 4ème catégorie + '338937240': 5ème catégorie + '338937241': 1ère catégorie + '338937242': 2ème catégorie + '338937244': 3ème catégorie + '338937245': 4ème catégorie + '338937246': 5ème catégorie + '338937271': 1ère catégorie + '338937272': 2ème catégorie + '338937274': 3ème catégorie + '338937275': 4ème catégorie + '338937277': 1ère catégorie + '338937278': 2ème catégorie + '338937280': 3ème catégorie + '338937281': 4ème catégorie + '338937282': 5ème catégorie + '338937283': 5ème catégorie + '338937284': 1ère catégorie + '338937285': 2ème catégorie + '338937287': 3ème catégorie + '338937288': 4ème catégorie + '338937289': 1ère catégorie + '338937290': 2ème catégorie + '338937292': 3ème catégorie + '338937293': 4ème catégorie + '338937294': 5ème catégorie + '338937295': 1ère catégorie + '338937296': 2ème catégorie + '338937307': 1ère catégorie + '338937308': 2ème catégorie + '338937310': 3ème catégorie + '338937311': 4ème catégorie + '338937312': 5ème catégorie + '338937314': Catégorie unique + '339086196': 1ère catégorie + '339086197': 2ème catégorie + '339086210': 1ère catégorie + '339086211': 2ème catégorie + '339086213': 3ème catégorie + '339086214': 4ème catégorie + '339086215': 5ème catégorie + '340826015': Catégorie 3 + '340826016': Catégorie 1 + '340826017': Catégorie 2 + '340826018': Catégorie 4 + '340826019': Catégorie 5 + '341179212': CAT1 + '341179213': CAT2 + '341179214': CAT3 + '341179215': CAT4 + '341179216': CAT5 + '341264860': 1ère catégorie + '341264861': 2ème catégorie + '341264863': 3ème catégorie + '341264864': 4ème catégorie + '341264866': 1ère catégorie + '341264867': 2ème catégorie + '341264869': 3ème catégorie + '341264870': 4ème catégorie + '341264872': 1ère catégorie + '342752792': catétgorie unique +subTopicNames: + '337184262': Musique amplifiée + '337184263': Musique baroque + '337184267': Ciné-concert + '337184268': Musique classique + '337184269': Jazz + '337184273': Musique de chambre + '337184275': Musique dirigée + '337184279': Musique du monde + '337184280': Pop/rock + '337184281': Musique de chambre + '337184282': Famille + '337184283': Concert + '337184284': Opéra (version de concert) + '337184288': Musique contemporaine + '337184292': Musique vocale + '337184296': Musique ancienne + '337184297': Chanson + '337184298': Voix + '337184299': famille +subjectNames: {} +topicNames: + '107888604': Activité + '324846098': Type de public + '324846099': Genre + '324846100': Formations musicales +topicSubTopics: + '107888604': + - 337184283 + - 337184267 + '324846098': + - 337184299 + '324846099': + - 337184268 + - 337184288 + - 337184284 + - 337184263 + - 337184298 + - 337184269 + - 337184280 + - 337184297 + - 337184281 + - 337184296 + - 337184279 + '324846100': + - 337184275 + - 337184262 + - 337184292 + - 337184273 + - 337184282 +venueNames: + PLEYEL_PLEYEL: Salle Pleyel diff --git a/tool/benchmark/cases/ubuntu.yml b/tool/benchmark/cases/ubuntu.yml new file mode 100644 index 00000000..0702a9d7 --- /dev/null +++ b/tool/benchmark/cases/ubuntu.yml @@ -0,0 +1,300 @@ +name: Ubuntu + +on: + push: + branches: + - develop + - main + paths: + - .github/workflows/ubuntu.yml + - cmake/** + - include/** + - single_include/** + - test/** + - tool/** + - .clang-tidy + - CMakeLists.txt + - Makefile + pull_request: + paths: + - .github/workflows/ubuntu.yml + - cmake/** + - include/** + - single_include/** + - test/** + - tool/** + - .clang-tidy + - CMakeLists.txt + - Makefile + workflow_dispatch: + +env: + JOBS: 3 + +concurrency: + group: ${{github.workflow}}-${{github.ref}} + cancel-in-progress: true + +jobs: + ubuntu-latest: + timeout-minutes: 10 + runs-on: ubuntu-latest + strategy: + matrix: + build_type: [ Debug, Release ] + use_single_header: ["ON", "OFF"] + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Configure CMake + run: cmake -B ${{github.workspace}}/build_${{matrix.build_type}} -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DFK_YAML_BUILD_TEST=ON -DFK_YAML_USE_SINGLE_HEADER=${{matrix.use_single_header}} + + - name: Build + run: cmake --build ${{github.workspace}}/build_${{matrix.build_type}} --config ${{matrix.build_type}} -j ${{env.JOBS}} + + - name: Test + working-directory: ${{github.workspace}}/build_${{matrix.build_type}} + run: ctest -C ${{matrix.build_type}} --output-on-failure -j ${{env.JOBS}} + + ci_test_clang_tidy: + timeout-minutes: 10 + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Run Clang-Tidy + run: make clang-tidy + + ci_test_iwyu: + timeout-minutes: 10 + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install include-what-you-use + run: | + sudo apt-get update + sudo apt-get install -y iwyu + include-what-you-use --version + + - name: Run include-what-you-use + run: make iwyu + + ci_test_valgrind: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Valgrind + run: | + sudo apt-get update + sudo apt-get install -y valgrind + valgrind --version + + - name: Run Valgrind + run: make valgrind + + ci_test_clang_sanitizers: + runs-on: ubuntu-latest + container: silkeh/clang:latest + timeout-minutes: 10 + + steps: + - name: Install git and unzip + run: | + apt-get update + apt-get install -y git unzip + git --version + + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Get latest CMake + uses: lukka/get-cmake@latest + + - name: Run Clang Sanitizers + run: make clang-sanitizers + + ci_test_clang_cxx_standards: + runs-on: ubuntu-latest + container: silkeh/clang:latest + strategy: + matrix: + cxx_standard: [ "11", "14", "17", "20", "23" ] + build_type: [ Debug, Release ] + + steps: + - name: Install git and unzip + run: | + apt-get update + apt-get install -y git unzip + git --version + + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Get latest CMake + uses: lukka/get-cmake@latest + + - name: Install package for test + run: | + cmake -B ${{github.workspace}}/build_for_package + cmake --build ${{github.workspace}}/build_for_package --target install + rm -rf ${{github.workspace}}/build_for_package + + - name: Configure CMake + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DFK_YAML_BUILD_ALL_TEST=ON -DFK_YAML_TEST_TARGET_CXX_STANDARD=${{matrix.cxx_standard}} + + - name: Build & Test + run: | + cmake --build ${{github.workspace}}/build --config ${{matrix.build_type}} -j ${{env.JOBS}} + cd ${{github.workspace}}/build + ctest -C ${{matrix.build_type}} --output-on-failure -j ${{env.JOBS}} + + ci_test_gcc_cxx_standards: + runs-on: ubuntu-latest + container: gcc:latest + strategy: + matrix: + cxx_standard: [ "11", "14", "17", "20", "23" ] + build_type: [ Debug, Release ] + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Get latest CMake + uses: lukka/get-cmake@latest + + - name: Install package for test + run: | + cmake -B ${{github.workspace}}/build_for_package + cmake --build ${{github.workspace}}/build_for_package --target install + rm -rf ${{github.workspace}}/build_for_package + + - name: Configure CMake and Ninja + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DFK_YAML_BUILD_ALL_TEST=ON -DFK_YAML_TEST_TARGET_CXX_STANDARD=${{matrix.cxx_standard}} + + - name: Build & Test + run: | + cmake --build ${{github.workspace}}/build --config ${{matrix.build_type}} -j ${{env.JOBS}} + cd ${{github.workspace}}/build + ctest -C ${{matrix.build_type}} --output-on-failure -j ${{env.JOBS}} + + ci_test_clang_versions: + runs-on: ubuntu-latest + strategy: + matrix: + compiler: [ "3.5", "3.6", "3.7", "3.8", "3.9", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", latest ] + build_type: [ Debug, Release ] + container: silkeh/clang:${{matrix.compiler}} + + steps: + - name: Install git and unzip + run: | + apt-get update + apt-get install -y git unzip + git --version + + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Get latest CMake and Ninja + uses: lukka/get-cmake@latest + + - name: Install package for test + run: | + cmake -B ${{github.workspace}}/build_for_package + cmake --build ${{github.workspace}}/build_for_package --target install + rm -rf ${{github.workspace}}/build_for_package + + - name: Configure CMake + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DFK_YAML_BUILD_ALL_TEST=ON + + - name: Build & Test + run: | + cmake --build ${{github.workspace}}/build --config ${{matrix.build_type}} -j ${{env.JOBS}} + cd ${{github.workspace}}/build + ctest -C ${{matrix.build_type}} --output-on-failure -j ${{env.JOBS}} + + ci_test_gcc_versions: + runs-on: ubuntu-latest + strategy: + matrix: + compiler: [ "7", "8", "9", "10", "11", "12", "13", "14", latest ] + build_type: [ Debug, Release ] + container: gcc:${{matrix.compiler}} + + steps: + - name: Install git and unzip + run: | + apt-get update + apt-get install -y git unzip + git --version + + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Get latest CMake and Ninja + uses: lukka/get-cmake@latest + + - name: Install package for test + run: | + cmake -B ${{github.workspace}}/build_for_package + cmake --build ${{github.workspace}}/build_for_package --target install + rm -rf ${{github.workspace}}/build_for_package + + - name: Configure CMake + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DFK_YAML_BUILD_ALL_TEST=ON + + - name: Build & Test + run: | + cmake --build ${{github.workspace}}/build --config ${{matrix.build_type}} -j ${{env.JOBS}} + cd ${{github.workspace}}/build + ctest -C ${{matrix.build_type}} --output-on-failure -j ${{env.JOBS}} + + ci_test_icpx: + runs-on: ubuntu-latest + strategy: + matrix: + build_type: [ Debug, Release ] + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Intel oneAPI Base Toolkit + run: | # from the official document: https://www.intel.com/content/www/us/en/docs/oneapi/installation-guide-linux/2024-1/apt.html + wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null + echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list + sudo apt-get update + sudo apt-get install -y intel-basekit + + - name: Configure CMake + run: | + source /opt/intel/oneapi/setvars.sh + cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DFK_YAML_BUILD_TEST=ON + + - name: Build + run: cmake --build ${{github.workspace}}/build --config ${{matrix.build_type}} -j ${{env.JOBS}} + + - name: Test + run: ctest --test-dir ${{github.workspace}}/build -C ${{matrix.build_type}} --output-on-failure -j ${{env.JOBS}} diff --git a/tool/benchmark/macos.yml b/tool/benchmark/macos.yml deleted file mode 100644 index f141133f..00000000 --- a/tool/benchmark/macos.yml +++ /dev/null @@ -1,157 +0,0 @@ -name: macOS - -on: - push: - branches: - - develop - - main - paths: - - .github/workflows/macos.yml - - cmake/** - - include/** - - single_include/** - - test/** - - CMakeLists.txt - pull_request: - paths: - - .github/workflows/macos.yml - - cmake/** - - include/** - - single_include/** - - test/** - - CMakeLists.txt - workflow_dispatch: - -concurrency: - group: ${{github.workflow}}-${{github.ref}} - cancel-in-progress: true - -jobs: - macos-latest: - timeout-minutes: 10 - runs-on: macos-latest - strategy: - matrix: - build_type: [ Debug, Release ] - single_header: ["ON", "OFF"] - env: - JOBS: 2 - - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DFK_YAML_BUILD_TEST=ON -DFK_YAML_USE_SINGLE_HEADER=${{matrix.single_header}} - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{matrix.build_type}} -j ${{env.JOBS}} - - - name: Test - working-directory: ${{github.workspace}}/build - run: ctest -C ${{matrix.build_type}} --output-on-failure -j ${{env.JOBS}} - - xcode_for_macos11: - timeout-minutes: 10 - runs-on: macos-11 - strategy: - matrix: - xcode: [ '11.7', '12.4', '12.5.1', '13.0', '13.1', '13.2.1' ] - build_type: [ Debug, Release ] - env: - DEVELOPER_DIR: /Applications/Xcode_${{matrix.xcode}}.app/Contents/Developer - JOBS: 2 - - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DFK_YAML_BUILD_TEST=ON - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{matrix.build_type}} -j ${{env.JOBS}} - - - name: Test - working-directory: ${{github.workspace}}/build - run: ctest -C ${{matrix.build_type}} --output-on-failure -j ${{env.JOBS}} - - xcode_for_macos12: - timeout-minutes: 10 - runs-on: macos-12 - strategy: - matrix: - xcode: [ '13.1', '13.2.1', '13.3.1', '13.4.1', '14.0.1', '14.1', '14.2' ] - build_type: [ Debug, Release ] - env: - DEVELOPER_DIR: /Applications/Xcode_${{matrix.xcode}}.app/Contents/Developer - JOBS: 2 - - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DFK_YAML_BUILD_TEST=ON - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{matrix.build_type}} -j ${{env.JOBS}} - - - name: Test - working-directory: ${{github.workspace}}/build - run: ctest -C ${{matrix.build_type}} --output-on-failure -j ${{env.JOBS}} - - xcode_for_macos13: - timeout-minutes: 10 - runs-on: macos-13 - strategy: - matrix: - xcode: [ '14.1', '14.2', '14.3.1', '15.0.1', '15.1', '15.2' ] - build_type: [ Debug, Release ] - env: - DEVELOPER_DIR: /Applications/Xcode_${{matrix.xcode}}.app/Contents/Developer - JOBS: 3 - - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DFK_YAML_BUILD_TEST=ON - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{matrix.build_type}} -j ${{env.JOBS}} - - - name: Test - working-directory: ${{github.workspace}}/build - run: ctest -C ${{matrix.build_type}} --output-on-failure -j ${{env.JOBS}} - - xcode_for_macos14: - timeout-minutes: 10 - runs-on: macos-14 - strategy: - matrix: - xcode: [ '14.3.1', '15.0.1', '15.1', '15.2', '15.3' ] - build_type: [ Debug, Release ] - env: - DEVELOPER_DIR: /Applications/Xcode_${{matrix.xcode}}.app/Contents/Developer - JOBS: 2 - - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DFK_YAML_BUILD_TEST=ON - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{matrix.build_type}} -j ${{env.JOBS}} - - - name: Test - working-directory: ${{github.workspace}}/build - run: ctest -C ${{matrix.build_type}} --output-on-failure -j ${{env.JOBS}} diff --git a/tool/benchmark/main.cpp b/tool/benchmark/main.cpp index 14d6aff7..701d818c 100644 --- a/tool/benchmark/main.cpp +++ b/tool/benchmark/main.cpp @@ -1,18 +1,29 @@ // _______ __ __ __ _____ __ __ __ // | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library (supporting code) -// | __| _ < \_ _/| ___ | _ | |___ version 0.3.12 +// | __| _ < \_ _/| ___ | _ | |___ version 0.3.13 // |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML // // SPDX-FileCopyrightText: 2023-2024 Kensuke Fukutani // SPDX-License-Identifier: MIT +#ifdef _MSC_VER +// suppress the C4996 warning against the usage of fopen(). +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include +#include #include #include #include #include + +#ifdef FK_YAML_BM_HAS_LIBFYAML #include +#endif + #include #include #include @@ -83,8 +94,15 @@ void bm_libfyaml_parse(benchmark::State& st) { // rapidyaml (in place) void bm_rapidyaml_parse_inplace(benchmark::State& st) { - c4::substr c4_test_src = c4::to_substr(test_src).trimr('\0'); + std::string in_place_buff(test_src.size(), '\0'); + c4::substr c4_test_src = c4::to_substr(in_place_buff).trimr('\0'); + for (auto _ : st) { + // ryml::parse_in_place() modifies the contents of `in_place_buff` during parsing. + // Without the following copy, the second (and subsequent) parsing would fail. + assert(in_place_buff.size() == test_src.size()); + std::memcpy(&in_place_buff[0], &test_src[0], in_place_buff.size()); + ryml::Tree tree = ryml::parse_in_place(c4_test_src); } @@ -107,8 +125,10 @@ void bm_rapidyaml_parse_arena(benchmark::State& st) { // Register benchmarking functions. BENCHMARK(bm_fkyaml_parse); BENCHMARK(bm_yamlcpp_parse); + #ifdef FK_YAML_BM_HAS_LIBFYAML BENCHMARK(bm_libfyaml_parse); #endif + BENCHMARK(bm_rapidyaml_parse_inplace); BENCHMARK(bm_rapidyaml_parse_arena); diff --git a/tool/benchmark/result_debug.log b/tool/benchmark/result_debug.log deleted file mode 100644 index 7ba5bd5b..00000000 --- a/tool/benchmark/result_debug.log +++ /dev/null @@ -1,8 +0,0 @@ -------------------------------------------------------------------------------------- -Benchmark Time CPU Iterations UserCounters... -------------------------------------------------------------------------------------- -bm_fkyaml_parse 121413 ns 121413 ns 5836 bytes_per_second=39.1517Mi/s items_per_second=9.14129k/s -bm_yamlcpp_parse 4963184 ns 4963204 ns 141 bytes_per_second=883.651Ki/s items_per_second=201.483/s -bm_libfyaml_parse 595741 ns 595744 ns 1185 bytes_per_second=7.18924Mi/s items_per_second=1.67857k/s -bm_rapidyaml_parse_inplace 238052 ns 238052 ns 3007 bytes_per_second=17.9916Mi/s items_per_second=4.20075k/s -bm_rapidyaml_parse_arena 235499 ns 235502 ns 2966 bytes_per_second=18.1865Mi/s items_per_second=4.24625k/s diff --git a/tool/benchmark/result_release.log b/tool/benchmark/result_release.log deleted file mode 100644 index b80e5952..00000000 --- a/tool/benchmark/result_release.log +++ /dev/null @@ -1,8 +0,0 @@ -------------------------------------------------------------------------------------- -Benchmark Time CPU Iterations UserCounters... -------------------------------------------------------------------------------------- -bm_fkyaml_parse 105774 ns 105775 ns 6662 bytes_per_second=41.0509Mi/s items_per_second=9.58472k/s -bm_yamlcpp_parse 579017 ns 579019 ns 1202 bytes_per_second=7.39692Mi/s items_per_second=1.72706k/s -bm_libfyaml_parse 137681 ns 137669 ns 5726 bytes_per_second=31.1104Mi/s items_per_second=7.26379k/s -bm_rapidyaml_parse_inplace 29092 ns 29092 ns 24046 bytes_per_second=147.221Mi/s items_per_second=34.3737k/s -bm_rapidyaml_parse_arena 29557 ns 29557 ns 23782 bytes_per_second=144.904Mi/s items_per_second=33.8327k/s diff --git a/tool/benchmark/results/result_debug_citm_catalog_json.txt b/tool/benchmark/results/result_debug_citm_catalog_json.txt new file mode 100644 index 00000000..6f6f7341 --- /dev/null +++ b/tool/benchmark/results/result_debug_citm_catalog_json.txt @@ -0,0 +1,18 @@ +2024-10-13T02:04:56+09:00 +Running ./build_bm_debug/tool/benchmark/benchmarker +Run on (16 X 3193.88 MHz CPU s) +CPU Caches: + L1 Data 32 KiB (x8) + L1 Instruction 32 KiB (x8) + L2 Unified 512 KiB (x8) + L3 Unified 16384 KiB (x1) +Load Average: 0.16, 0.30, 0.40 +***WARNING*** Library was built as DEBUG. Timings may be affected. +------------------------------------------------------------------------------------- +Benchmark Time CPU Iterations UserCounters... +------------------------------------------------------------------------------------- +bm_fkyaml_parse 23349021 ns 23347957 ns 30 bytes_per_second=70.5496Mi/s items_per_second=42.8303/s +bm_yamlcpp_parse 831355289 ns 831372800 ns 1 bytes_per_second=1.98129Mi/s items_per_second=1.20283/s +bm_libfyaml_parse 119048859 ns 119053880 ns 5 bytes_per_second=13.8357Mi/s items_per_second=8.39956/s +bm_rapidyaml_parse_inplace 65126 ns 65125 ns 8378 bytes_per_second=24.7001Gi/s items_per_second=15.3552k/s +bm_rapidyaml_parse_arena 44036503 ns 44038113 ns 16 bytes_per_second=37.4037Mi/s items_per_second=22.7076/s diff --git a/tool/benchmark/results/result_debug_citm_catalog_yml.txt b/tool/benchmark/results/result_debug_citm_catalog_yml.txt new file mode 100644 index 00000000..759f795e --- /dev/null +++ b/tool/benchmark/results/result_debug_citm_catalog_yml.txt @@ -0,0 +1,18 @@ +2024-10-13T02:05:01+09:00 +Running ./build_bm_debug/tool/benchmark/benchmarker +Run on (16 X 3193.88 MHz CPU s) +CPU Caches: + L1 Data 32 KiB (x8) + L1 Instruction 32 KiB (x8) + L2 Unified 512 KiB (x8) + L3 Unified 16384 KiB (x1) +Load Average: 0.23, 0.31, 0.40 +***WARNING*** Library was built as DEBUG. Timings may be affected. +------------------------------------------------------------------------------------- +Benchmark Time CPU Iterations UserCounters... +------------------------------------------------------------------------------------- +bm_fkyaml_parse 22455707 ns 22457000 ns 30 bytes_per_second=30.4668Mi/s items_per_second=44.5295/s +bm_yamlcpp_parse 848988826 ns 848900400 ns 1 bytes_per_second=825.32Ki/s items_per_second=1.17799/s +bm_libfyaml_parse 112468150 ns 112466929 ns 7 bytes_per_second=6.08351Mi/s items_per_second=8.8915/s +bm_rapidyaml_parse_inplace 20576 ns 20574 ns 34118 bytes_per_second=32.4757Gi/s items_per_second=48.6049k/s +bm_rapidyaml_parse_arena 35946283 ns 35944910 ns 20 bytes_per_second=19.0345Mi/s items_per_second=27.8204/s diff --git a/tool/benchmark/results/result_debug_ubuntu_yml.txt b/tool/benchmark/results/result_debug_ubuntu_yml.txt new file mode 100644 index 00000000..edf8686e --- /dev/null +++ b/tool/benchmark/results/result_debug_ubuntu_yml.txt @@ -0,0 +1,18 @@ +2024-10-13T02:04:52+09:00 +Running ./build_bm_debug/tool/benchmark/benchmarker +Run on (16 X 3193.88 MHz CPU s) +CPU Caches: + L1 Data 32 KiB (x8) + L1 Instruction 32 KiB (x8) + L2 Unified 512 KiB (x8) + L3 Unified 16384 KiB (x1) +Load Average: 0.09, 0.28, 0.40 +***WARNING*** Library was built as DEBUG. Timings may be affected. +------------------------------------------------------------------------------------- +Benchmark Time CPU Iterations UserCounters... +------------------------------------------------------------------------------------- +bm_fkyaml_parse 165697 ns 165705 ns 4219 bytes_per_second=50.744Mi/s items_per_second=6.03481k/s +bm_yamlcpp_parse 7938718 ns 7939041 ns 88 bytes_per_second=1.05914Mi/s items_per_second=125.96/s +bm_libfyaml_parse 1025815 ns 1025825 ns 680 bytes_per_second=8.19686Mi/s items_per_second=974.825/s +bm_rapidyaml_parse_inplace 959 ns 959 ns 717671 bytes_per_second=8.56577Gi/s items_per_second=1.04315M/s +bm_rapidyaml_parse_arena 289903 ns 289915 ns 2444 bytes_per_second=29.0035Mi/s items_per_second=3.44929k/s diff --git a/tool/benchmark/results/result_release_citm_catalog_json.txt b/tool/benchmark/results/result_release_citm_catalog_json.txt new file mode 100644 index 00000000..ae7ed38c --- /dev/null +++ b/tool/benchmark/results/result_release_citm_catalog_json.txt @@ -0,0 +1,17 @@ +2024-10-13T01:55:12+09:00 +Running ./build_bm_release/tool/benchmark/benchmarker +Run on (16 X 3193.88 MHz CPU s) +CPU Caches: + L1 Data 32 KiB (x8) + L1 Instruction 32 KiB (x8) + L2 Unified 512 KiB (x8) + L3 Unified 16384 KiB (x1) +Load Average: 0.38, 0.40, 0.44 +------------------------------------------------------------------------------------- +Benchmark Time CPU Iterations UserCounters... +------------------------------------------------------------------------------------- +bm_fkyaml_parse 19846319 ns 19847303 ns 35 bytes_per_second=82.9931Mi/s items_per_second=50.3847/s +bm_yamlcpp_parse 115684121 ns 115689950 ns 6 bytes_per_second=14.238Mi/s items_per_second=8.64379/s +bm_libfyaml_parse 31415418 ns 31416483 ns 24 bytes_per_second=52.4308Mi/s items_per_second=31.8304/s +bm_rapidyaml_parse_inplace 53018 ns 53020 ns 12756 bytes_per_second=30.339Gi/s items_per_second=18.8607k/s +bm_rapidyaml_parse_arena 11307118 ns 11307543 ns 61 bytes_per_second=145.672Mi/s items_per_second=88.4365/s diff --git a/tool/benchmark/results/result_release_citm_catalog_yml.txt b/tool/benchmark/results/result_release_citm_catalog_yml.txt new file mode 100644 index 00000000..9cacdb5f --- /dev/null +++ b/tool/benchmark/results/result_release_citm_catalog_yml.txt @@ -0,0 +1,17 @@ +2024-10-13T01:55:16+09:00 +Running ./build_bm_release/tool/benchmark/benchmarker +Run on (16 X 3193.88 MHz CPU s) +CPU Caches: + L1 Data 32 KiB (x8) + L1 Instruction 32 KiB (x8) + L2 Unified 512 KiB (x8) + L3 Unified 16384 KiB (x1) +Load Average: 0.43, 0.41, 0.44 +------------------------------------------------------------------------------------- +Benchmark Time CPU Iterations UserCounters... +------------------------------------------------------------------------------------- +bm_fkyaml_parse 19463284 ns 19463849 ns 37 bytes_per_second=35.152Mi/s items_per_second=51.3773/s +bm_yamlcpp_parse 111843539 ns 111849533 ns 6 bytes_per_second=6.11709Mi/s items_per_second=8.94058/s +bm_libfyaml_parse 29637484 ns 29638652 ns 25 bytes_per_second=23.0845Mi/s items_per_second=33.7397/s +bm_rapidyaml_parse_inplace 21471 ns 21472 ns 29716 bytes_per_second=31.117Gi/s items_per_second=46.5713k/s +bm_rapidyaml_parse_arena 10318869 ns 10318941 ns 66 bytes_per_second=66.3046Mi/s items_per_second=96.9092/s diff --git a/tool/benchmark/results/result_release_ubuntu_yml.txt b/tool/benchmark/results/result_release_ubuntu_yml.txt new file mode 100644 index 00000000..8ee920d5 --- /dev/null +++ b/tool/benchmark/results/result_release_ubuntu_yml.txt @@ -0,0 +1,17 @@ +2024-10-13T01:55:07+09:00 +Running ./build_bm_release/tool/benchmark/benchmarker +Run on (16 X 3193.88 MHz CPU s) +CPU Caches: + L1 Data 32 KiB (x8) + L1 Instruction 32 KiB (x8) + L2 Unified 512 KiB (x8) + L3 Unified 16384 KiB (x1) +Load Average: 0.32, 0.38, 0.44 +------------------------------------------------------------------------------------- +Benchmark Time CPU Iterations UserCounters... +------------------------------------------------------------------------------------- +bm_fkyaml_parse 152489 ns 152496 ns 4506 bytes_per_second=55.1393Mi/s items_per_second=6.55753k/s +bm_yamlcpp_parse 960175 ns 960191 ns 732 bytes_per_second=8.75716Mi/s items_per_second=1.04146k/s +bm_libfyaml_parse 241862 ns 241871 ns 3140 bytes_per_second=34.7645Mi/s items_per_second=4.13443k/s +bm_rapidyaml_parse_inplace 417 ns 417 ns 1656253 bytes_per_second=19.6806Gi/s items_per_second=2.39672M/s +bm_rapidyaml_parse_arena 59956 ns 59958 ns 11651 bytes_per_second=140.24Mi/s items_per_second=16.6783k/s diff --git a/tool/natvis_generator/fkYAML.natvis.j2 b/tool/natvis_generator/fkYAML.natvis.j2 index b560e9b8..bee4142c 100644 --- a/tool/natvis_generator/fkYAML.natvis.j2 +++ b/tool/natvis_generator/fkYAML.natvis.j2 @@ -6,18 +6,18 @@ - {*(m_node_value.p_sequence)} - {*(m_node_value.p_mapping)} - nullptr - {m_node_value.boolean} - {m_node_value.integer} - {m_node_value.float_val} - {*(m_node_value.p_string)} + {*(m_node_value.p_sequence)} + {*(m_node_value.p_mapping)} + nullptr + {m_node_value.boolean} + {m_node_value.integer} + {m_node_value.float_val} + {*(m_node_value.p_string)} - + *(m_node_value.p_sequence),view(simple) - + *(m_node_value.p_mapping),view(simple) diff --git a/tool/natvis_generator/params.json b/tool/natvis_generator/params.json index 45c880b7..48616f95 100644 --- a/tool/natvis_generator/params.json +++ b/tool/natvis_generator/params.json @@ -1 +1 @@ -{ "version": "0.3.12" } +{ "version": "0.3.13" }